message.repo.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. /**
  2. * 消息库。
  3. */
  4. "use strict";
  5. let configFile = require('../../include/commons').CONFIG_FILE;
  6. let config = require('../../resources/config/' + configFile);
  7. let log = require('../../util/log.js');
  8. let SessionRepo = require('../../repository/mysql/session.repo');
  9. let ImDb = require('../mysql/db/im.db');
  10. const DB_TABLES = require('../../include/commons').DB_TABLES;
  11. class MessageRepo {
  12. constructor() {
  13. }
  14. /**
  15. * 分页获取消息
  16. *
  17. * @param sessionId
  18. * @param page
  19. * @param size
  20. * @param handler
  21. */
  22. static findBySessionId(sessionId, page, size, messageType, handler) {
  23. if (page < 0) {
  24. page = 0;
  25. }
  26. SessionRepo.findOne(sessionId, function (err, res) {
  27. if (!err) {
  28. if (res.length == 0) {
  29. handler(null, null);
  30. return;
  31. }
  32. var params = [];
  33. let type = res[0].type;
  34. let MessageTable = "";
  35. if (type == 1) {
  36. MessageTable = DB_TABLES.MucMessages;
  37. } else if (type == 2) {
  38. MessageTable = DB_TABLES.P2pMessages;
  39. } else {
  40. MessageTable = DB_TABLES.GroupMessages;
  41. }
  42. let where = " w.session_id = ? ";
  43. params.push(sessionId);
  44. if (messageType) {
  45. where += " and content_type=? ";
  46. params.push(messageType);
  47. }
  48. let sql = "select id, session_id, sender_id, sender_name, content_type, content, timestamp from " +
  49. MessageTable + " w where " + where + " order by w.id limit ?, ?";
  50. params.push(page);
  51. params.push(size);
  52. ImDb.execQuery({
  53. "sql": sql,
  54. "args": params,
  55. "handler": handler
  56. });
  57. }
  58. });
  59. }
  60. /**
  61. * 保存消息
  62. *
  63. * @param message 消息对象
  64. * @param sessionType 会话类型,1表示MUC会话,2表示P2P,3表示群会话,4表示临时讨论组
  65. * @param messageId
  66. * @param sessionId
  67. */
  68. static save(message, sessionType, messageId, sessionId, handler) {
  69. var sql = "INSERT INTO " + DB_TABLES.sessionTypeToTableName(sessionType) +
  70. " (id, session_id, sender_id, sender_name,content_type, content, timestamp) VALUES (?,?,?,?,?,?,?)";
  71. ImDb.execQuery({
  72. "sql": sql,
  73. "args": [messageId, sessionId, message.sender_id, message.sender_name, message.content_type, message.content, message.timestamp],
  74. "handler": handler || function (err, res) {
  75. log.info(res);
  76. }
  77. });
  78. }
  79. }
  80. module.exports = MessageRepo;