ソースを参照

增加会话状态

8 年 前
コミット
3bb6ecc0b8

+ 25 - 0
src/server/models/sessions/sessions.js

@ -66,6 +66,8 @@ class Sessions extends RedisModel {
                        }
                        ModelUtil.emitError(self.eventEmitter, {message: err, status: -1}, null);
                    } else {
                        //更新成为进行中的会话
                        self.updateSessionStatus(sessionId,0);
                        if (handler) {
                            handler(null, res);
                            return;
@ -1038,6 +1040,29 @@ class Sessions extends RedisModel {
            }
        });
    }
    /**
     * 针对MUC模式更新会话的当前状态
     * @param sessionId
     */
    updateSessionStatus(sessionId,status){
        let self = this;
        let sessionKey  =  RedisModel.makeRedisKey(REDIS_KEYS.Session,sessionId);
        redis.hsetAsync(sessionKey,"status",status).then(function(res){
                if(!res){
                    logger.error("set session status to redis is error !");
                }
                SessionRepo.updateSessionStatus(sessionId,status,function(err,sqlResult){
                    if(err){
                        logger.error("set session status to mysql is error !");
                    }else{
                        logger.info("set session status is success");
                    }
                });
        });
    }
}
// Expose class

+ 2 - 1
src/server/models/sessions/topics.js

@ -331,7 +331,8 @@ class Topics extends RedisModel {
                    ModelUtil.emitOK(self.eventEmitter, {status: -1, "message": err});
                } else {
                    ModelUtil.emitOK(self.eventEmitter, {status: 200, "id": msgId, "message": "结束成功!"});
                    TopicsRepo.endTopic(topicId, endUser, msg.date, msgId, TOPIC_STATUS.ENDED);
                    TopicsRepo.endTopic(topicId, endUser, msg.timestamp, msgId, TOPIC_STATUS.ENDED);
                    sessions.updateSessionStatus(sessionId,1);
                }
            })
        }

+ 1 - 0
src/server/models/user/users.js

@ -174,6 +174,7 @@ class Users extends RedisModel {
                                        "last_content", session.last_content == null ? "" : session.last_content,
                                        "last_message_time", session.last_message_time == null ? "" : session.last_message_time,
                                        "create_date", ObjectUtil.timestampToLong(session.create_date),
                                        "status",session.status==null?0:session.status
                                    ];
                                    // cache sessions

+ 12 - 1
src/server/repository/mysql/session.repo.js

@ -38,7 +38,7 @@ class SessionRepo {
    static findAll(userId, handler) {
        let sql = "select session_id from " + DB_TABLES.Participants + " w where w.participant_id = ? and participant_role =0  group by w.session_id";
        let sys_session = "select session_id from " + DB_TABLES.Participants + " w where w.participant_id = 'system' and participant_role =0  group by w.session_id";
        let sessionSQL = "select id, name, type, create_date, last_sender_id, last_sender_name, last_content_type, last_content, last_message_time from "
        let sessionSQL = "select id, name, type, create_date, last_sender_id, last_sender_name, last_content_type, last_content, last_message_time,status from "
            + DB_TABLES.Sessions + " s where s.id in(" + sql + ") and s.id not in ("+sys_session+")";
        ImDb.execQuery({
            "sql": sessionSQL,
@ -197,6 +197,17 @@ class SessionRepo {
            }
        });
    }
    static updateSessionStatus(sessionId,status,handler){
        let sql = "update " + DB_TABLES.Sessions + " set status=? where id = ?";
        ImDb.execQuery({
            "sql": sql,
            "args": [status, sessionId],
            "handler": handler || function (err, res) {
                if(err) log.error(err);
            }
        });
    }
}
module.exports = SessionRepo;

+ 0 - 1
src/server/repository/redis/redis.client.js

@ -49,7 +49,6 @@ class RedisClient {
        if (redisClient == null) {
            redisClient = new RedisClient();
        }
        return redisClient;
    }
}