+1
-1
| { | ||
| "name": "nodeqim", | ||
| "version": "0.0.4", | ||
| "version": "0.0.5", | ||
| "description": "qcloud im for nodejs", | ||
@@ -5,0 +5,0 @@ "main": "qim/qim.js", |
+145
-89
@@ -14,9 +14,20 @@ 'use strict'; | ||
| MSG_ELEMENT_TYPE: im.MSG_ELEMENT_TYPE, | ||
| LOG_INFO: 'info', | ||
| LOG_ERROR: 'error', | ||
| LOG_CLOSE: 'close', | ||
| EVENT: { | ||
| MESSAGE_RECV: 'message_recv', | ||
| KICKED_OUT: 'kicked_out', | ||
| CONNECT_OFF: 'connect_off', | ||
| CONNECT_ON: 'connect_on', | ||
| RECONNECT: 'reconnect' | ||
| }, | ||
| _log_level: 'error', // close, debug, error | ||
| _log_level: this.LOG_INFO, // close, debug, error | ||
| _is_im_login: false, | ||
| _user_id: '', | ||
| _listeners: {}, | ||
| _listeners: {}, | ||
| inner_listeners: { | ||
@@ -29,39 +40,50 @@ "onConnNotify": onConnNotify, //监听连接状态回调变化事件,必填 | ||
| }, | ||
| /** 内部接口 */ | ||
| _info: function(msg){ this._log_level === this.LOG_INFO && console.log("[TAG-QIM] "+msg); }, | ||
| _error: function(msg){ this._log_level != this.LOG_CLOSE && console.error("[TAG-QIM] "+msg); }, | ||
| /** 对外接口 */ | ||
| init: function(onErrorCallback, logLevel = 'error'){ | ||
| this._listeners.onError = onErrorCallback; | ||
| this._log_level = logLevel; | ||
| setLogLevel: function(level){ | ||
| this._log_level = level; | ||
| }, | ||
| setMsgRecvListener: function(listener){ | ||
| this._listeners.onMsgRecv = listener; | ||
| }, | ||
| /** 登录相关 */ | ||
| login: function(sdkAppId, userId, userSig, callback){ | ||
| login: function(sdkAppId, userId, userSig){ | ||
| this._info("login->sdkappid:"+sdkAppId+", userId:"+userId); | ||
| return new Promise((resolve, reject)=>{ | ||
| im.login({ | ||
| sdkAppID: sdkAppId, | ||
| accountType: ""+sdkAppId, | ||
| identifier: userId, | ||
| userSig: userSig | ||
| }, this.inner_listeners, {isLogOn: this._log_level=='debug'}, | ||
| (rsp)=>{ | ||
| this._is_im_login = true; | ||
| this._user_id = userId; | ||
| this._log("[TAG-QIM] login->success: "+userId); | ||
| callback(0, ""); | ||
| }, | ||
| (err)=>{ | ||
| this._log("[TAG-QIM] login->failed: "+err.ErrorInfo); | ||
| callback(err.ErrorCode, err.ErrorInfo); | ||
| }) | ||
| sdkAppID: sdkAppId, | ||
| accountType: ""+sdkAppId, | ||
| identifier: userId, | ||
| userSig: userSig | ||
| }, this.inner_listeners, {isLogOn: false}, | ||
| (rsp)=>{ | ||
| this._is_im_login = true; | ||
| this._user_id = userId; | ||
| this._info("login->completed: "+userId); | ||
| resolve(rsp); | ||
| }, | ||
| (err)=>{ | ||
| this._error("login->failed: "+err); | ||
| reject(err); | ||
| }) | ||
| }) | ||
| }, | ||
| logout: function(callback){ | ||
| logout: function(){ | ||
| this._info("logout->userid: "+this._user_id); | ||
| return Promise((resolve, reject)=>{ | ||
| im.logout((rsp)=>{ | ||
| this._is_im_login = false; | ||
| callback(0, rsp); | ||
| this._is_im_login = false; | ||
| this._info("logout->completed: "+this._user_id); | ||
| resolve(rsp); | ||
| }, (err)=>{ | ||
| callback(err.ErrorCode, err.ErrorInfo); | ||
| this._error("login->failed: "+err); | ||
| reject(err); | ||
| }) | ||
| }) | ||
| }, | ||
| /** 群组相关 */ | ||
| createGroup: function(groupId, callback) { | ||
| createGroup: function(groupId) { | ||
| this._info("createGroup->groupId: "+groupId); | ||
| return new Promise((resolve, reject)=>{ | ||
| var options = { | ||
@@ -74,48 +96,59 @@ 'GroupId': groupId, | ||
| }; | ||
| this._log("[TAG-QIM] createGroup->start create group:" + groupId) | ||
| im.createGroup( | ||
| options, | ||
| function (resp) { | ||
| callback(0, resp); | ||
| log.info("[TAG-QIM] create Group success"); | ||
| this._info("createGroup->completed: "+groupId); | ||
| resolve(resp); | ||
| }, | ||
| function (err) { | ||
| callback(err.ErrorCode, err.ErrorInfo); | ||
| this.error("createGroup->fail: "+err); | ||
| reject(err); | ||
| } | ||
| ) | ||
| }) | ||
| }, | ||
| joinGroup: function(groupId, callback) { | ||
| joinGroup: function(groupId) { | ||
| this._info("joinGroup->groupId: "+groupId); | ||
| return new Promise((resolve, reject)=>{ | ||
| var options = { | ||
| 'GroupId': groupId | ||
| }; | ||
| this._log("[TAG-QIM] joinGroup->start join group:" + groupId) | ||
| im.applyJoinGroup( | ||
| options, | ||
| function (resp) { | ||
| callback(0, resp); | ||
| this._info("joinGroup->completed: "+groupId); | ||
| resolve(resp); | ||
| }, | ||
| function (err) { | ||
| callback(err.ErrorCode, err.ErrorInfo); | ||
| this._error("joinGroup->fail:"+err); | ||
| reject(err); | ||
| } | ||
| ) | ||
| }) | ||
| }, | ||
| quitGroup: function(groupId, callback){ | ||
| var options = { | ||
| 'GroupId': groupId | ||
| }; | ||
| this._log("[TAG-QIM] quitGroup->group:"+groupId); | ||
| im.quitGroup( | ||
| options, | ||
| function (resp) { | ||
| callback(0, resp); | ||
| }, | ||
| function (err) { | ||
| callback(err.ErrorCode, err.ErrorInfo); | ||
| } | ||
| ) | ||
| quitGroup: function(groupId){ | ||
| this._info("quitGroup->groupId: "+groupId); | ||
| return new Promise((resolve, reject)=>{ | ||
| var options = { | ||
| 'GroupId': groupId | ||
| }; | ||
| im.quitGroup( | ||
| options, | ||
| function (resp) { | ||
| this._info("quitGroup->completed:"+groupId); | ||
| resolve(resp); | ||
| }, | ||
| function (err) { | ||
| this._error("quitGroup->fail:"+err); | ||
| reject(err); | ||
| } | ||
| ) | ||
| }) | ||
| }, | ||
| getGroupList: function(callback) { | ||
| getGroupList: function() { | ||
| this._info("getGroupList->enter"); | ||
| return new Promise((resolve, reject)=>{ | ||
| var options = { | ||
| 'Member_Account': this._user_id, | ||
| 'Limit': 20, | ||
| 'Limit': 60, | ||
| 'Offset': 0, | ||
@@ -150,3 +183,4 @@ 'GroupBaseInfoFilter': [ | ||
| if (!rsp.GroupIdList || rsp.GroupIdList.length == 0) { | ||
| callback(0, data); | ||
| this._info("getGroupList->completed with empty"); | ||
| resolve(data); | ||
| return; | ||
@@ -184,12 +218,19 @@ } | ||
| } | ||
| callback(0, data); | ||
| resolve(data); | ||
| }, | ||
| function (err) { | ||
| callback(err.ErrorCode, err.ErrorInfo); | ||
| this._info("getGroupList->fail:"+err); | ||
| reject(err); | ||
| } | ||
| ) | ||
| }) | ||
| }, | ||
| /** 消息相关 */ | ||
| sendTextMessage: function(groupId, text, callback=null) { | ||
| if (!text || text.length==0) callback && callback(); | ||
| sendTextMessage: function(groupId, text) { | ||
| this._info("sendTextMessage->text: "+text+"/"+groupId); | ||
| return new Promise((resolve, reject)=>{ | ||
| if (!text || text.length==0){ | ||
| reject({ErrorCode: -1, ErrorInfo: "发送消息不能为空"}); | ||
| this._error("sendTextMessage->fail with empty"); | ||
| } | ||
| var session = new im.Session(im.SESSION_TYPE.GROUP, groupId, groupId, "", Math.round(new Date().getTime() / 1000)); | ||
@@ -200,8 +241,19 @@ var msg = new im.Msg(session, true, -1, -1, -1, this._user_id, 0, ""); | ||
| im.sendMsg(msg, (rsp) => { | ||
| this._log("[TAG-QIM] sendTextMessage->groupId:" + groupId + ", rsp: " + rsp.ErrorCode+"|"+rsp.ErrorInfo); | ||
| if (null != callback) callback(rsp); | ||
| if (rsp.ErrorCode == 0){ | ||
| this._info("sendTextMessage->completed"); | ||
| resolve(rsp); | ||
| }else{ | ||
| this._error("sendTextMessage->fail: "+rsp) | ||
| reject(rsp); | ||
| } | ||
| }); | ||
| }) | ||
| }, | ||
| sendCustomMessage: function(groupId, data, ext, callback=null) { | ||
| if (!data || data.length==0) callback && callback(); | ||
| this._info("sendCustomMessage->text: "+text+"/"+groupId); | ||
| return new Promise((resolve, reject)=>{ | ||
| if (!data || data.length==0){ | ||
| this._error("sendCustomMessage->fail with empty"); | ||
| reject({ErrorCode: -1, ErrorInfo: "发送消息不能为空"}); | ||
| } | ||
| var session = new im.Session(im.SESSION_TYPE.GROUP, groupId, groupId, "", Math.round(new Date().getTime() / 1000)); | ||
@@ -212,33 +264,33 @@ var msg = new im.Msg(session, true, -1, -1, -1, this._user_id, 0, ""); | ||
| im.sendMsg(msg, (rsp) => { | ||
| rsp.ErrorCode!=0 && this._log("[TAG-QIM] sendCustomMessage->groupId:" + groupId + ", rsp: " + rsp.ErrorCode+"|"+rsp.ErrorInfo); | ||
| if (null != callback) callback(rsp); | ||
| if (rsp.ErrorCode == 0){ | ||
| this._info("sendTextMessage->completed"); | ||
| resolve(rsp); | ||
| }else{ | ||
| this._error("sendTextMessage->fail: "+rsp) | ||
| reject(rsp); | ||
| } | ||
| }); | ||
| }) | ||
| }, | ||
| /** 测试 */ | ||
| _log: function(msg){ | ||
| this._log_level === 'debug' && console.log(msg); | ||
| /** 监听回调 */ | ||
| on: function(event, listener){ | ||
| this._listeners[event] = listener; | ||
| }, | ||
| _err: function(msg){ | ||
| this._log_level != 'close' && console.error(msg); | ||
| }, | ||
| /** 内部接口 */ | ||
| notifyEvent: function(code, msg){ | ||
| if (this._listeners.hasOwnProperty('onError')){ | ||
| this._listeners.onError(code, msg); | ||
| notifyEvent: function(event, data){ | ||
| if (this._listeners.hasOwnProperty(event)){ | ||
| this._listeners[event](data); | ||
| } | ||
| }, | ||
| _onKickedEventCall: function(){ | ||
| this._log("[TAG-QIM] onKickedEventCall->您的帐号已在其他地方登录"); | ||
| this.notifyEvent(-2, '您的帐号已在其他地方登录!'); | ||
| this._info("onKickedEventCall->您的帐号已在其他地方登录"); | ||
| this.notifyEvent(this.EVENT.KICKED_OUT, {ErrorCode: -2, ErrorInfo: '您的帐号已在其他地方登录!'}); | ||
| }, | ||
| _onMsgNotify: function(newMsgList) { | ||
| //console.warn(newMsgList); | ||
| this._info("onMsgNotify->recv msg"); | ||
| var sess, newMsg; | ||
| // 被踢后不处理消息 | ||
| if (!this._is_im_login)return; | ||
| //获取所有聊天会话 | ||
| var sessMap = im.MsgStore.sessMap(); | ||
| for (var j in newMsgList) {//遍历新消息 | ||
@@ -249,5 +301,8 @@ newMsg = newMsgList[j]; | ||
| var elem = elems[i]; | ||
| if (this._listeners.hasOwnProperty('onMsgRecv')){ | ||
| this._listeners.onMsgRecv(newMsg.getSession().id(), newMsg.getFromAccount(), elem, newMsg.getTime()); | ||
| } | ||
| this.notifyEvent(this.EVENT.MESSAGE_RECV, { | ||
| session_id: newMsg.getSession().id(), | ||
| sender: newMsg.getFromAccount(), | ||
| element: elem, | ||
| timestamp: newMsg.getTime() | ||
| }) | ||
| } | ||
@@ -260,16 +315,17 @@ } | ||
| case im.CONNECTION_STATUS.ON: | ||
| this._log('[TAG-QIM] 建立连接成功: ' + resp.ErrorInfo); | ||
| this._info('connect->建立连接成功: ' + resp.ErrorInfo); | ||
| this.notifyEvent(this.EVENT.CONNECT_ON, {ErrorCode: 0, ErrorInfo: resp.ErrorInfo}); | ||
| break; | ||
| case im.CONNECTION_STATUS.OFF: | ||
| info = '连接已断开,无法收到新消息,请检查下您的网络是否正常: ' + resp.ErrorInfo; | ||
| this._log("[TAG-QIM] "+info); | ||
| this.notifyEvent(1, "连接已断开: " + info); | ||
| this._info("connect->"+info); | ||
| this.notifyEvent(this.EVENT.CONNECT_ON, {ErrorCode: -1, ErrorInfo: info}); | ||
| break; | ||
| case im.CONNECTION_STATUS.RECONNECT: | ||
| info = '连接状态恢复正常: ' + resp.ErrorInfo; | ||
| this._log('[TAG-QIM] 连接状态恢复正常: ' + info); | ||
| this.notifyEvent(2, "连接状态恢复正常" + info); | ||
| this._info('connect->连接状态恢复正常: ' + info); | ||
| this.notifyEvent(this.EVENT.RECONNECT, {ErrorCode: 0, ErrorInfo: info}); | ||
| break; | ||
| default: | ||
| this._err('[TAG-QIM] 未知连接状态: ' + resp.ErrorInfo); | ||
| this._error('connect->未知连接状态: ' + resp.ErrorInfo); | ||
| break; | ||
@@ -276,0 +332,0 @@ } |
Sorry, the diff of this file is too big to display
311704
0.51%7046
0.74%