소스 검색

增加对端口绑定失败判断;修改用户端不在线提示

Sand 8 년 전
부모
커밋
c61d872398

+ 8 - 2
src/server/app.js

@ -102,5 +102,11 @@ server.on('listening', function onListening() {
let socketHandler = new SocketHandler(io);
socketHandler.start();
log.info('Starting IM server, version ' + config.version + ', running on port ' + server.address().port + ', ' + new Date().toLocaleString());
log.info('Configuration profile: ' + configFile.split('.')[1]);
if(!server.address()){
    log.error('Starting IM server failed, port is already in use.');
    process.exit(1);
} else {
    log.info('Starting IM server, version ' + config.version + ', running on port ' + server.address().port + ', ' + new Date().toLocaleString());
    log.info('Configuration profile: ' + configFile.split('.')[1]);
}

+ 1 - 1
src/server/endpoints/v2/application.endpoint.js

@ -43,7 +43,7 @@ router.get(APIv2.Application.BadgeNo, function (req, response) {
                };
                let req = http.request(options, function (res) {
                    log.info('家庭医生平台:开始请求: http://', options.hostname + ":" + options.port + options.path);
                    log.info('家庭医生平台->开始请求: http://', options.hostname + ":" + options.port + options.path);
                    res.setEncoding('utf8');
                    res.on('data', function (chunk) {

+ 1 - 1
src/server/endpoints/v2/user.endpoint.js

@ -80,7 +80,7 @@ router.put(APIv2.Users.UserStatus, function (req, res) {
 */
router.delete(APIv2.Users.Logout, function (req, res) {
    let userId = req.query.user_id;
    if (userId == null) {
    if (!userId) {
        throw {httpStatus: 406, message: 'Logout Failed. Missing field: user_id.'};
    }

+ 1 - 1
src/server/models/client/app.client.js

@ -100,7 +100,7 @@ class AppClient extends RedisModel {
                return;
            }
            if(!userStatus){
                log.warn("userStatus is not online!");
                log.warn("User of app endpoint is not online, user id: " + targetId);
                return;
            }
            let tipMessage = CONTENT_TYPES.typeToDescription(parseInt(message.content_type), "您有一条新消息") || message.content;

+ 1 - 1
src/server/models/client/wechat.client.js

@ -57,7 +57,7 @@ class WechatClient extends RedisModel {
        if (patientClient) {
            WechatClient.sendViaWebSocket(patientClient.socket, message);
        } else {
            log.info("User is not online, user id: ", message.to, ", sending via wechat template message.");
            log.info("User of wechat endpoint is not online, user id: ", message.to, ", sending via wechat template message.");
            WechatClient.sendViaTemplateMessage(message);
        }

+ 1 - 0
src/server/resources/schema/ichat_1.2.8_table_schema.sql

@ -85,6 +85,7 @@ CREATE TABLE `app_status`
	`token` VARCHAR(100) COMMENT '个推Token',
	`client_id` VARCHAR(100) COMMENT '客户端ID',
	`app_in_bg` TINYINT COMMENT 'App是否处于后台状态',
	`last_login_time` TIMESTAMP(0) COMMENT '最后登录时间',
	CONSTRAINT `PK_user_status` PRIMARY KEY (`user_id`)
) COMMENT='app端状态'
COLLATE='utf8mb4_general_ci'

+ 2 - 183
src/server/resources/schema/temp.sql

@ -1,6 +1,6 @@
/* ---------------------------------------------------- */
/*  Generated by Enterprise Architect Version 12.0 		*/
/*  Created On : 18-Jan-2017 2:35:45 PM 				*/
/*  Created On : 18-Jan-2017 3:37:41 PM 				*/
/*  DBMS       : MySql 						*/
/* ---------------------------------------------------- */
@ -8,70 +8,11 @@ SET FOREIGN_KEY_CHECKS=0
/* Drop Tables */
DROP TABLE IF EXISTS `system_messages` CASCADE
;
DROP TABLE IF EXISTS `sticky_sessions` CASCADE
;
DROP TABLE IF EXISTS `wechat_access_tokens` CASCADE
;
DROP TABLE IF EXISTS `app_status` CASCADE
;
DROP TABLE IF EXISTS `topics` CASCADE
;
DROP TABLE IF EXISTS `p2p_messages` CASCADE
;
DROP TABLE IF EXISTS `group_messages` CASCADE
;
DROP TABLE IF EXISTS `muc_messages` CASCADE
;
DROP TABLE IF EXISTS `participants` CASCADE
;
DROP TABLE IF EXISTS `sessions` CASCADE
;
/* Create Tables */
CREATE TABLE `system_messages`
(
	`id` VARCHAR(32) NOT NULL COMMENT '消息ID',
	`session_id` VARCHAR(50) NOT NULL COMMENT '所属会话',
	`sender_id` VARCHAR(50) NOT NULL COMMENT '消息发送者',
	`sender_name` VARCHAR(50),
	`content_type` INTEGER NOT NULL COMMENT '消息类型,1文本,2图片,3语音,4文章,5跳转,6咨询开始,7咨询结束',
	`content` VARCHAR(1024) COMMENT '消息内容',
	`business_type` VARCHAR(50) COMMENT '业务类型,IM不处理,只做存储与转发',
	`timestamp` TIMESTAMP(0) COMMENT '发送时间',
	CONSTRAINT `PK_messages` PRIMARY KEY (`id`)
) COMMENT='P2P会话消息'
;
CREATE TABLE `sticky_sessions`
(
	`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
	`session_id` VARCHAR(50) NOT NULL COMMENT '会话ID',
	`score` NUMERIC(15,0) COMMENT '置顶分值',
	CONSTRAINT `PK_sticky_sessions` PRIMARY KEY (`user_id`,`session_id`)
) COMMENT='置顶会话'
;
CREATE TABLE `wechat_access_tokens`
(
	`access_token` VARCHAR(50) NOT NULL COMMENT '访问token',
	`expiry_date` TIMESTAMP(0) COMMENT '过期时间',
	`create_time` TIMESTAMP(0) COMMENT '数据创建时间',
	CONSTRAINT `PK_wechat_access_tokens` PRIMARY KEY (`access_token`)
) COMMENT='微信接口调用所需要token'
;
CREATE TABLE `app_status`
(
	`user_id` VARCHAR(50) NOT NULL COMMENT '用户ID',
@ -79,131 +20,9 @@ CREATE TABLE `app_status`
	`token` VARCHAR(100) COMMENT '个推Token',
	`client_id` VARCHAR(100) COMMENT '客户端ID',
	`app_in_bg` TINYINT COMMENT 'App是否处于后台状态',
	`last_login_time` TIMESTAMP(0) COMMENT '最后登录时间',
	CONSTRAINT `PK_user_status` PRIMARY KEY (`user_id`)
) COMMENT='app端状态'
;
CREATE TABLE `topics`
(
	`id` VARCHAR(32) NOT NULL COMMENT 'ID',
	`session_id` VARCHAR(50) NOT NULL COMMENT 'MUC会话ID',
	`name` VARCHAR(50) COMMENT '议题名称',
	`create_time` TIMESTAMP(0) COMMENT '创建时间',
	`end_by` VARCHAR(50) COMMENT '结束人ID',
	`end_time` TIMESTAMP(0) COMMENT '结束时间',
	`start_message_id` INTEGER COMMENT '消息起始ID',
	`end_message_id` INTEGER COMMENT '消息结束ID',
	`status` INT COMMENT '议题状态,0新建,1已回复未结束,10结束',
	`description` VARCHAR(1024) COMMENT '议题描述',
	CONSTRAINT `PK_topics` PRIMARY KEY (`id`)
) COMMENT='议题,仅MUC模式使用。'
;
CREATE TABLE `p2p_messages`
(
	`id` VARCHAR(32) NOT NULL COMMENT '消息ID',
	`session_id` VARCHAR(50) NOT NULL COMMENT '所属会话',
	`sender_id` VARCHAR(50) NOT NULL COMMENT '消息发送者',
	`sender_name` VARCHAR(50),
	`content_type` INTEGER NOT NULL COMMENT '消息类型,1文本,2图片,3语音,4文章,5跳转,6咨询开始,7咨询结束',
	`content` VARCHAR(1024) COMMENT '消息内容',
	`business_type` VARCHAR(50) COMMENT '业务类型,IM不处理,只做存储与转发',
	`timestamp` TIMESTAMP(0) COMMENT '发送时间',
	CONSTRAINT `PK_messages` PRIMARY KEY (`id`)
) COMMENT='P2P会话消息'
;
CREATE TABLE `group_messages`
(
	`id` VARCHAR(32) NOT NULL COMMENT '消息ID',
	`session_id` VARCHAR(50) NOT NULL COMMENT '所属会话',
	`sender_id` VARCHAR(50) NOT NULL COMMENT '消息发送者',
	`sender_name` VARCHAR(50),
	`content_type` INTEGER NOT NULL COMMENT '消息类型,1文本,2图片,3语音,4文章,5跳转,6咨询开始,7咨询结束',
	`content` VARCHAR(1024) COMMENT '消息内容',
	`timestamp` TIMESTAMP(0) COMMENT '发送时间',
	`business_type` VARCHAR(50) COMMENT '业务类型,IM不处理,只做存储与转发',
	`at` VARCHAR(1024) COMMENT '发送消息时,at某人',
	CONSTRAINT `PK_messages` PRIMARY KEY (`id`)
) COMMENT='群会话消息'
;
CREATE TABLE `muc_messages`
(
	`id` VARCHAR(32) NOT NULL COMMENT '消息ID',
	`session_id` VARCHAR(50) NOT NULL COMMENT '所属会话',
	`sender_id` VARCHAR(50) NOT NULL COMMENT '消息发送者',
	`sender_name` VARCHAR(50),
	`content_type` INTEGER NOT NULL COMMENT '消息类型,1文本,2图片,3语音,4文章,5跳转,6咨询开始,7咨询结束',
	`content` VARCHAR(1024) COMMENT '消息内容',
	`business_type` VARCHAR(50) COMMENT '业务类型,IM不处理,只做存储与转发',
	`timestamp` TIMESTAMP(0) COMMENT '发送时间',
	CONSTRAINT `PK_messages` PRIMARY KEY (`id`)
) COMMENT='MUC会话消息'
;
CREATE TABLE `participants`
(
	`session_id` VARCHAR(50) NOT NULL COMMENT '会话ID。ID结构:以患者ID+最大次数',
	`participant_id` VARCHAR(50) NOT NULL COMMENT '参与者ID',
	`participant_role` INTEGER COMMENT 'MUC中的参与者角色。0为主持人, 1为普通参与者, 10为旁听者',
	`last_fetch_time` TIMESTAMP(0) COMMENT '最后获取此会话消息的时间',
	CONSTRAINT `PK_participants` PRIMARY KEY (`session_id`,`participant_id`)
) ENGINE=InnoDB COMMENT='会话参与者'
;
CREATE TABLE `sessions`
(
	`id` VARCHAR(50) NOT NULL COMMENT '会话标识。会话标识来源根据业务场景:1 医生间P2P会话使用随机生成的ID;2 医生间的群会话使用行政团队的ID;3 医生与患者间的咨询以患者的ID+当前咨询次数为ID',
	`name` VARCHAR(50) NOT NULL COMMENT '会话名称',
	`type` INTEGER NOT NULL COMMENT '会话类型,0表示系统会话,1表示MUC会话,2表示P2P,3表示群会话,4表示临时讨论组',
	`business_type` INT COMMENT '业务相关类型',
	`create_date` DATETIME(0) NOT NULL COMMENT '创建时间',
	`last_sender_id` VARCHAR(50) COMMENT '消息最后发送人ID',
	`last_sender_name` VARCHAR(50) COMMENT '消息最后发送人姓名',
	`last_content_type` VARCHAR(50) COMMENT '消息最后内容类型',
	`last_content` VARCHAR(1024) COMMENT '消息最后内容',
	`last_message_time` TIMESTAMP(0) COMMENT '消息最后时间',
	CONSTRAINT `PK_sessions` PRIMARY KEY (`id`)
) COMMENT='会话'
;
/* Create Primary Keys, Indexes, Uniques, Checks */
ALTER TABLE `system_messages` 
 ADD INDEX `IXFK_messages_participants` (`session_id` ASC,`sender_id` ASC)
;
ALTER TABLE `system_messages` 
 ADD INDEX `IXFK_messages_sessions` (`session_id` ASC)
;
ALTER TABLE `topics` 
 ADD INDEX `IXFK_topics_sessions` (`session_id` ASC)
;
ALTER TABLE `p2p_messages` 
 ADD INDEX `IXFK_messages_participants` (`session_id` ASC,`sender_id` ASC)
;
ALTER TABLE `p2p_messages` 
 ADD INDEX `IXFK_messages_sessions` (`session_id` ASC)
;
ALTER TABLE `group_messages` 
 ADD INDEX `IXFK_messages_participants` (`session_id` ASC,`sender_id` ASC)
;
ALTER TABLE `group_messages` 
 ADD INDEX `IXFK_messages_sessions` (`session_id` ASC)
;
ALTER TABLE `muc_messages` 
 ADD INDEX `IXFK_messages_participants` (`session_id` ASC,`sender_id` ASC)
;
ALTER TABLE `muc_messages` 
 ADD INDEX `IXFK_messages_sessions` (`session_id` ASC)
;
SET FOREIGN_KEY_CHECKS=1