messages.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. /**
  2. * 消息模型。
  3. */
  4. "use strict";
  5. let RedisClient = require('../../repository/redis/redis.client.js');
  6. let redisClient = RedisClient.redisClient();
  7. let redis = redisClient.connection;
  8. let RedisModel = require('./../redis.model.js');
  9. let modelUtil = require('../../util/modelUtil');
  10. var imDb = require('../../repository/mysql/db/im.db');
  11. let log = require('../../util/log.js');
  12. let Sessions = require('../sessions/sessions');
  13. let configFile = require('../../include/commons').CONFIG_FILE;
  14. let config = require('../../resources/config/' + configFile);
  15. const RedisKey = require('../../include/commons').REDIS_KEYS;
  16. const IMTABLE = require('../../include/commons').IM_DB;
  17. class Messages extends RedisModel {
  18. constructor() {
  19. super();
  20. }
  21. /**
  22. * 根据topicId获取对应的议题的信息列表
  23. * @param topicId
  24. */
  25. getMessagesByTopicId(topicId){
  26. }
  27. /**
  28. * 分页
  29. * 根据topicId获取对应的议题的成员信息
  30. * @param topicId
  31. */
  32. getMessagesByTopicIdForPage(topicId,page,pagesize){
  33. }
  34. /**
  35. * 根据sessionId获取对应的会话的信息列表mysql
  36. * @param sessionId
  37. */
  38. getMessagesBySession(sessionId,handler){
  39. let session = new Sessions();
  40. session.getSessions(sessionId,function(err,res){
  41. if(err){
  42. return;
  43. }else{
  44. if(res.length==0){
  45. log.warn("session is not found!");
  46. return;
  47. }
  48. let type = res[0].type;
  49. let db ="";
  50. if(type==1){
  51. db = IMTABLE.MUCMSG;
  52. }else if(type==2){
  53. db = IMTABLE.P2PMSG;
  54. }else{
  55. db = IMTABLE.GROUPMSG;
  56. }
  57. let sql = "select * from "+db+" w where w.session_id = ? limit 0,"+config.sessionConfig.maxMessageCount;
  58. imDb.execQuery({
  59. "sql": sessionsql,
  60. "args": [sessionId],
  61. "handler": function (err, res) {
  62. if(err) {
  63. log.error("sql:"+sql+"data:sessionId:"+sessionId);
  64. }else{
  65. log.info("getMessagesBySession success by sessionId :"+sessionId);
  66. }
  67. handler(err,res);
  68. }
  69. })
  70. }
  71. })
  72. }
  73. /**
  74. * 分页获取消息MySQL
  75. * @param sessionId
  76. * @param page
  77. * @param pagesize
  78. */
  79. getMessageByPage(sessionId,page,pagesize,handler){
  80. if(page>0){
  81. page =page*pagesize;
  82. }
  83. let session = new Sessions();
  84. session.getSessions(sessionId,function(err,res){
  85. if(err){
  86. return;
  87. }else{
  88. if(res.length==0){
  89. log.warn("session is not found!");
  90. return;
  91. }
  92. let type = res[0].type;
  93. let db ="";
  94. if(type==1){
  95. db = IMTABLE.MUCMSG;
  96. }else if(type==2){
  97. db = IMTABLE.P2PMSG;
  98. }else{
  99. db = IMTABLE.GROUPMSG;
  100. }
  101. let sql = "select * from "+db+" w where w.session_id = ? limit ?,?";
  102. imDb.execQuery({
  103. "sql": sessionsql,
  104. "args": [sessionId,page,pagesize],
  105. "handler": function (err, res) {
  106. if(err) {
  107. log.error("sql:"+sql+"data:sessionId:"+sessionId);
  108. }else{
  109. log.info("getMessagesBySession success by sessionId :"+sessionId);
  110. }
  111. handler(err,res);
  112. }
  113. })
  114. }
  115. })
  116. }
  117. /**
  118. * 根据消息ID获取单条消息
  119. * @param messageId
  120. */
  121. getMessagesByid(messageId){
  122. }
  123. saveMessageForRedis(message_id,sessionId,message){
  124. let message_key = super.makeRedisKey(RedisKey.Messages,sessionId);
  125. let message_timestamp_key = super.makeRedisKey(RedisKey.MessagesTimestamp,sessionId);
  126. redis.hsetAsync(message_key, message_id, JSON.stringify(message)).then(function (res) {
  127. log.info("success save redis message by session :"+sessionId);
  128. //保存message_timestamp_key redis
  129. return redis.zaddAsync(message_timestamp_key, message.timestamp.getTime(), message_id);
  130. });
  131. }
  132. /**
  133. * 保存Message 到mysql
  134. * @param messages 消息对象
  135. * @type type 会话类型,1表示MUC会话,2表示P2P,3表示群会话,4表示临时讨论组
  136. */
  137. saveMessageForMysql(messages,type,messageid,sessionId){
  138. 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 (?,?,?,?,?,?,?) ";
  139. imDb.execQuery({
  140. "sql": sql,
  141. "args": [messageid,sessionId,messages.senderId,messages.senderName,messages.contentType,messages.content,messages.timestamp],
  142. "handler": function (err, res) {
  143. if(err) {
  144. log.error("sql:"+sql+",error:"+err+",data:"+JSON.stringify(messages)+",messageid:"+messageid+",sessionId:"+sessionId);
  145. }else{
  146. log.info("save message to mysql is success by session :"+sessionId);
  147. }
  148. }
  149. });
  150. }
  151. }
  152. // Expose class
  153. module.exports = Messages;