123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- /**
- * 消息模型。
- */
- "use strict";
- let RedisClient = require('../../repository/redis/redis.client.js');
- let redisClient = RedisClient.redisClient();
- let redis = redisClient.connection;
- let RedisModel = require('./../redis.model.js');
- let modelUtil = require('../../util/modelUtil');
- var imDb = require('../../repository/mysql/db/im.db');
- let log = require('../../util/log.js');
- let Sessions = require('../sessions/sessions');
- let configFile = require('../../include/commons').CONFIG_FILE;
- let config = require('../../resources/config/' + configFile);
- const RedisKey = require('../../include/commons').REDIS_KEYS;
- const IMTABLE = require('../../include/commons').IM_DB;
- class Messages extends RedisModel {
- constructor() {
- super();
- }
- /**
- * 根据topicId获取对应的议题的信息列表
- * @param topicId
- */
- getMessagesByTopicId(topicId){
-
- }
- /**
- * 分页
- * 根据topicId获取对应的议题的成员信息
- * @param topicId
- */
- getMessagesByTopicIdForPage(topicId,page,pagesize){
- }
- /**
- * 根据sessionId获取对应的会话的信息列表mysql
- * @param sessionId
- */
- getMessagesBySession(sessionId,handler){
- let session = new Sessions();
- session.getSessions(sessionId,function(err,res){
- if(err){
- return;
- }else{
- if(res.length==0){
- log.warn("session is not found!");
- return;
- }
- let type = res[0].type;
- let db ="";
- if(type==1){
- db = IMTABLE.MUCMSG;
- }else if(type==2){
- db = IMTABLE.P2PMSG;
- }else{
- db = IMTABLE.GROUPMSG;
- }
- let sql = "select * from "+db+" w where w.session_id = ? limit 0,"+config.sessionConfig.maxMessageCount;
- imDb.execQuery({
- "sql": sessionsql,
- "args": [sessionId],
- "handler": function (err, res) {
- if(err) {
- log.error("sql:"+sql+"data:sessionId:"+sessionId);
- }else{
- log.info("getMessagesBySession success by sessionId :"+sessionId);
- }
- handler(err,res);
- }
- })
- }
- })
- }
- /**
- * 分页获取消息MySQL
- * @param sessionId
- * @param page
- * @param pagesize
- */
- getMessageByPage(sessionId,page,pagesize,handler){
- if(page>0){
- page =page*pagesize;
- }
- let session = new Sessions();
- session.getSessions(sessionId,function(err,res){
- if(err){
- return;
- }else{
- if(res.length==0){
- log.warn("session is not found!");
- return;
- }
- let type = res[0].type;
- let db ="";
- if(type==1){
- db = IMTABLE.MUCMSG;
- }else if(type==2){
- db = IMTABLE.P2PMSG;
- }else{
- db = IMTABLE.GROUPMSG;
- }
- let sql = "select * from "+db+" w where w.session_id = ? limit ?,?";
- imDb.execQuery({
- "sql": sessionsql,
- "args": [sessionId,page,pagesize],
- "handler": function (err, res) {
- if(err) {
- log.error("sql:"+sql+"data:sessionId:"+sessionId);
- }else{
- log.info("getMessagesBySession success by sessionId :"+sessionId);
- }
- handler(err,res);
- }
- })
- }
- })
- }
- /**
- * 根据消息ID获取单条消息
- * @param messageId
- */
- getMessagesByid(messageId){
- }
- saveMessageForRedis(message_id,sessionId,message){
- let message_key = super.makeRedisKey(RedisKey.Messages,sessionId);
- let message_timestamp_key = super.makeRedisKey(RedisKey.MessagesTimestamp,sessionId);
- redis.hsetAsync(message_key, message_id, JSON.stringify(message)).then(function (res) {
- log.info("success save redis message by session :"+sessionId);
- //保存message_timestamp_key redis
- return redis.zaddAsync(message_timestamp_key, message.timestamp.getTime(), message_id);
- });
- }
- /**
- * 保存Message 到mysql
- * @param messages 消息对象
- * @type type 会话类型,1表示MUC会话,2表示P2P,3表示群会话,4表示临时讨论组
- */
- saveMessageForMysql(messages,type,messageid,sessionId){
- var sql = "INSERT INTO "+(type==1?IMTABLE.MUCMSG:type==2?IMTABLE.P2PMSG:IMTABLE.GROUPMSG)+" (id, session_id, sender_id, sender_name,content_type, content, timestamp) VALUES (?,?,?,?,?,?,?) ";
- imDb.execQuery({
- "sql": sql,
- "args": [messageid,sessionId,messages.senderId,messages.senderName,messages.contentType,messages.content,messages.timestamp],
- "handler": function (err, res) {
- if(err) {
- log.error("sql:"+sql+",error:"+err+",data:"+JSON.stringify(messages)+",messageid:"+messageid+",sessionId:"+sessionId);
- }else{
- log.info("save message to mysql is success by session :"+sessionId);
- }
- }
- });
- }
- }
- // Expose class
- module.exports = Messages;
|