Browse Source

修复登录时消息及用户状态缓存失败bug

Sand 8 years ago
parent
commit
9a51546781

+ 27 - 13
src/server/models/user/users.js

@ -191,10 +191,10 @@ class Users extends RedisModel {
                    if (loginFromApp) {
                        // cache app status
                        multi = multi.hmset(userStatusKey, 'platform', platform, 'app_in_bg', false, 'client_id', clientId,
                            'token', token, 'last_login_time', lastLoginTime);
                            'token', token, 'last_login_time', lastLoginTime.getTime());
                    } else {
                        // cache wechat status
                        multi = multi.hmset(userKey, 'open_id', userInfo.open_id);
                        multi = multi.hmset(userKey, 'open_id', userInfo.open_id, 'last_login_time', lastLoginTime.getTime());
                    }
                    multi.execAsync().then(function (res) {
@ -222,14 +222,19 @@ class Users extends RedisModel {
                                        let sessionParticipantsKey = RedisModel.makeRedisKey(REDIS_KEYS.SessionParticipants, sessionId);
                                        let sessionParticipantsRoleKey = RedisModel.makeRedisKey(REDIS_KEYS.SessionParticipantsRole, sessionId);
                                        ParticipantRepo.findParticipants(sessionId, function (err, participants) {
                                            if(err){
                                                ModelUtil.emitError(self.eventEmitter, err.message);
                                                return;
                                            }
                                            participants.forEach(function (participant) {
                                                let participantId = participant.participant_id;
                                                let participantRole = participant.participant_role;
                                                let score = new Date().getTime();
                                                redisConn.multi()
                                                    .zadd(sessionParticipantsKey, participantId, score)
                                                    .hset(sessionParticipantsRoleKey, participantId, participantRole)
                                                    .zadd(sessionParticipantsKey, score, participantId)
                                                    .hset(sessionParticipantsRoleKey, participantRole, participantId)
                                                    .execAsync().then(function (res) {
                                                });
                                            });
@ -239,20 +244,24 @@ class Users extends RedisModel {
                                        let messagesKey = RedisModel.makeRedisKey(REDIS_KEYS.Messages, sessionId);
                                        let messagesByTimestampKey = RedisModel.makeRedisKey(REDIS_KEYS.MessagesByTimestamp, sessionId);
                                        MessageRepo.findBySessionId(sessionId, 0, config.sessionConfig.maxMessageCount, function (err, messages) {
                                            if(err){
                                                ModelUtil.emitError(self.eventEmitter, err.message);
                                                return;
                                            }
                                            messages.forEach(function (message) {
                                                let id = message.id;
                                                let msgJson = {
                                                    sessionId: message.session_id,
                                                    senderId: message.sender_id,
                                                    senderName: message.sender_name,
                                                    contentType: message.content_type,
                                                    content: message.content,
                                                    timestamp: message.timestamp
                                                    id: message.id,
                                                    sender_id: message.sender_id,
                                                    sender_name: message.sender_name,
                                                    timestamp: ObjectUtil.timestampToLong(message.timestamp),
                                                    content_type: message.content_type,
                                                    content: message.content
                                                };
                                                redisConn.multi()
                                                    .hset(messagesKey, id, msgJson)
                                                    .zadd(messagesByTimestampKey, id)
                                                    .hset(messagesKey, message.id, JSON.stringify(msgJson))
                                                    .zadd(messagesByTimestampKey, ObjectUtil.timestampToLong(message.timestamp), message.id)
                                                    .execAsync()
                                                    .then(function (res) {
                                                    });
@ -262,6 +271,11 @@ class Users extends RedisModel {
                                        // cache topics for MUC
                                        let topicsKey = RedisModel.makeRedisKey(REDIS_KEYS.Topics, sessionId);
                                        TopicRepo.findAll(sessionId, function (err, topics) {
                                            if(err){
                                                ModelUtil.emitError(self.eventEmitter, err.message);
                                                return;
                                            }
                                            topics.forEach(function (topic) {
                                                let topicKey = RedisModel.makeRedisKey(REDIS_KEYS.Topic, topic.id);
                                                let topicId = topic.id;

+ 4 - 11
src/server/repository/mysql/message.repo.js

@ -50,19 +50,12 @@ class MessageRepo {
                let sql = "select id, session_id, sender_id, sender_name, content_type, content, timestamp from " + MessageTable + " w where w.session_id = ? limit ?, ?";
                ImDb.execQuery({
                    "sql": session,
                    "sql": sql,
                    "args": [sessionId, page, size],
                    "handler": function (err, res) {
                        if (err) {
                            log.error("sql:" + sql + "data:sessionId:" + sessionId);
                        } else {
                            log.info("getMessagesBySession success by sessionId :" + sessionId);
                        }
                        handler(err, res);
                    }
                })
                    "handler": handler
                });
            }
        })
        });
    }
    /**

+ 1 - 1
src/server/resources/config/config.dev.js

@ -14,7 +14,7 @@ let imDbConfig = {
let redisConfig = {
    host: '192.168.1.220',
    port: 6379,
    db: 1
    db: 15
};
// 三师后台