Browse Source

增加短视频推送

8 years ago
parent
commit
c0e492d551

+ 2 - 2
src/server/handlers/socket.handler.js

@ -36,7 +36,7 @@ class SocketHandler {
                        return;
                    }
                    log.info('User ' + data.userId + ' login');
                    log.error('User ' + data.userId + ' login');
                    if(!data.clientType||data.clientType=="patient"){
                        let patientClient = new PatientClient(socket, socketServer);
                        patientClient.userId = data.userId;
@ -52,7 +52,7 @@ class SocketHandler {
                        doctorClient.userId = data.userId;
                        doctorClient.password = data.password;
                        doctorClient.clientType = data.clientType;
                        doctorClient.sessionId = data.sessionId;
                        doctorClient.sessionId = "";
                        clientCache.addClient(doctorClient);
                        socket.emit('ack', {});
                    }

+ 25 - 3
src/server/models/client/wechat.client.js

@ -86,7 +86,6 @@ class WechatClient extends RedisModel {
            content_type: message.content_type,
            content: message.content,
            timestamp: ObjectUtil.timestampToLong(message.timestamp),
            type: message.content_type,          // legacy support
            name: message.sender_name
        });
@ -96,12 +95,12 @@ class WechatClient extends RedisModel {
        let doctorClient = clientCache.findByIdAndType(doctorId,SOCKET_TYPES.DOCTOR);
        if(doctorClient){
            if(doctorClient.sessionId==sessionId)
                socket.emit('read',{ read:"all"});
                doctorClient.socket.emit('message',{ read:"all"});
        }
    }
    static sendReadDoctor(socket, message) {
        socket.emit('read', {
        socket.emit('message', {
            id: message.id,
            session_id: message.session_id,
            sender_id: message.sender_id,
@ -115,6 +114,29 @@ class WechatClient extends RedisModel {
        });
    }
    static sendReadDoctorByDoctorId(doctorId, message) {
        let doctorClient = clientCache.findByIdAndType(doctorId,SOCKET_TYPES.DOCTOR);
        if(!doctorClient){
            log.warn("target doctor is not online!");
            return;
        }
        let sendDoctorClient = clientCache.findByIdAndType(message.sender_id,SOCKET_TYPES.DOCTOR);
        sendDoctorClient.socket.emit('message', {
            id: message.id,
            session_id: message.session_id,
            sender_id: message.sender_id,
            sender_name: message.sender_name,
            content_type: message.content_type,
            content: message.content,
            timestamp: ObjectUtil.timestampToLong(message.timestamp),
            type: message.content_type,          // legacy support
            name: message.sender_name,
            read:"one"
        });
    }
    /**
     * 发送微信模板消息给居民
     *

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

@ -1048,6 +1048,7 @@ class Sessions extends RedisModel {
                WechatClient.sendMessage(targetUserId, targetUserName, message);
            }
            else {
                WechatClient.sendReadDoctorByDoctorId(targetUserId, message);
                AppClient.sendNotification(targetUserId, message);
            }
        });

+ 1 - 1
src/server/models/socket.io/client.cache.js

@ -51,7 +51,7 @@ class ClientCache {
    }
    findByIdAndType(userId,type){
        this._clientsByTypeAndUserId.get(userId+":"+type);
       return  this._clientsByTypeAndUserId.get(userId+":"+type);
    }
    findBySocket(socket) {

+ 20 - 2
src/server/repository/redis/redis.client.js

@ -23,10 +23,20 @@ Promise.promisifyAll(redis.Multi.prototype);
class RedisClient {
    constructor() {
        var redisConfig = config.redisConfig;
            redisConfig.retry_strategy = function(options){
                log.info("重新连接次数:"+options.times_connected);
                if (options.error.code === 'ECONNREFUSED') {
                    log.error('连接被拒绝');
                }
                if (options.times_connected > 10) {
                    log.error('重试连接超过十次');
                }
                return Math.max(options.attempt * 100, 3000);
            }
        this._connection = redis.createClient(
            config.redisConfig
        );
        this._connection.auth(config.redisConfig.password||"",function(){
            console.log('通过认证');
        });
@ -37,7 +47,6 @@ class RedisClient {
        this._connection.on('error', function (res) {
            log.error("Redis connect failed.");
            process.exit(2);
        })
    }
@ -53,4 +62,13 @@ class RedisClient {
    }
}
function uncaughtExceptionHandler(err){
    if(err && err.code == 'ECONNREFUSED'){
        //do someting
    }else{
        process.exit(1);
    }
}
process.on('uncaughtException', uncaughtExceptionHandler);
module.exports = RedisClient;