|
@ -0,0 +1,128 @@
|
|
|
/**
|
|
|
* 会话模型。
|
|
|
*/
|
|
|
"use strict";
|
|
|
|
|
|
let RedisClient = require('../../repository/redis/redis.client.js');
|
|
|
let redisClient = RedisClient.redisClient();
|
|
|
let redis = redisClient.connection;
|
|
|
let BaseModel = require('./../base.model.js');
|
|
|
let modelUtil = require('../../util/modelUtil');
|
|
|
let Messages = require('../messages/messages');
|
|
|
const RedisKeys = require('../../include/commons').REDIS_KEYS;
|
|
|
let mongoose = require('mongoose');
|
|
|
|
|
|
class Sessions extends BaseModel {
|
|
|
constructor() {
|
|
|
super();
|
|
|
this._sessions_key = RedisKeys.Sessions;
|
|
|
this._session_key = RedisKeys.Session;
|
|
|
this._msg_key = RedisKeys.Messages;
|
|
|
this._ms_key_timestamp = RedisKeys.MessagesTimestamp;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据sessionId获取对应的Session
|
|
|
* @param sessionId
|
|
|
*/
|
|
|
getSessionsById(sessionId){
|
|
|
|
|
|
|
|
|
}
|
|
|
/**
|
|
|
* 根据用户ID获取用户的session列表
|
|
|
* @param userId
|
|
|
*/
|
|
|
getUserSessions(userId){
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据sessionId获取对应的消息
|
|
|
* @param sessionId
|
|
|
*/
|
|
|
getSessionMessages(sessionId){
|
|
|
let key = this._msg_key.replace("{key}",sessionId);
|
|
|
console.log(key);
|
|
|
redis.zsetAsync(key,{ id: 'kris', password: 'password' }).then(function(res){
|
|
|
console.log(res);
|
|
|
redis.hgetallAsync(key).then(function(res){
|
|
|
console.log(res);
|
|
|
})
|
|
|
})
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 更新最后一条消息
|
|
|
* @param session_key rediskey
|
|
|
* @param create_date 创建时间
|
|
|
* @param last_content 最后一条消息内容
|
|
|
* @param last_content_type 消息类型
|
|
|
* @param type 会话类型
|
|
|
* @param sender 发送者ID
|
|
|
* @param sendername 发送者名字
|
|
|
* @param name 议题名称
|
|
|
* @returns {*}
|
|
|
*/
|
|
|
updateLastContent(session_key,session_type,name,message){
|
|
|
return redis.hmsetAsync(session_key,
|
|
|
"create_date", message.timestamp,
|
|
|
"last_content", message.content,
|
|
|
"last_content_type", message.contentType,
|
|
|
"type", session_type,
|
|
|
"senderId",message.senderId,
|
|
|
"senderName",message.senderName,
|
|
|
"name",name
|
|
|
);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
saveMessageBySession(message,sessionId) {
|
|
|
let self = this;
|
|
|
let message_key = super._getKey(this._msg_key,sessionId);
|
|
|
let message_timestamp_key = super._getKey(this._ms_key_timestamp,sessionId);
|
|
|
let session_key = super._getKey(this._session_key,sessionId);
|
|
|
let message_id = mongoose.Types.ObjectId().toString();
|
|
|
let session_type = 0;
|
|
|
let name = 0;
|
|
|
redis.hmgetAsync(session_key, ["type","name"]).then(function(res){
|
|
|
session_type = res[0];
|
|
|
name = res[1];
|
|
|
}).then(
|
|
|
redis.hsetAsync(message_key, message_id, JSON.stringify(message))).then(function (res) {
|
|
|
//保存message_timestamp_key redis
|
|
|
return redis.zaddAsync(message_timestamp_key, message.timestamp.getTime(), message_id);
|
|
|
}).then(function (res) {
|
|
|
//更新session的最后一条聊天记录
|
|
|
return self.updateLastContent(session_key,session_type,name,message);
|
|
|
}).then(function (res) {
|
|
|
//操作mysql数据库
|
|
|
let messages = new Messages();
|
|
|
messages.saveMessageForMysql(message,session_type,message_id,sessionId);
|
|
|
//返回数据给前端。
|
|
|
modelUtil.emitData(self.eventEmitter, "发送成功!");
|
|
|
}).catch(function (res) {
|
|
|
console.log(res);
|
|
|
})
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 根据sessionId获取对应的消息
|
|
|
* @param sessionId
|
|
|
*/
|
|
|
getSessionMessagesByPage(sessionId,page,pageSize){
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
// Expose class
|
|
|
module.exports = Sessions;
|