UNPKG

fcc-core

Version:

Fusion communication center.

149 lines (144 loc) 4.2 kB
import EventBus, { OnComfirmIM, OnIMMessage, OnIMRead } from '../../utils/event-bus' let imsocket // let heatImTime = 15 // let heatImTimer let maxReconnect = 5 let reconnect = 0 // 获取socket地址 async function getImsocketUrl (xw) { let params = { service: 'P0103401', PARAM_CODE: 'IM_SOCKET_URL', page: '1', pagecount: '100', isHttp: true } let result = await xw.ajaxRequest([ params ]) return result } let obj = { msgfn: function () {}, callBack: null, xw: {}, imFlag: false, init (callBack, msgCallback,xw) { let addressFun = getImsocketUrl(xw) addressFun.then(result => { if (result.code === '0' && result.data[0]) { let address = result.data[0].PARAM_VAL || '' let userCode =xw.userInfo['USER_CODE'] imsocket && imsocket.close() imsocket = new WebSocket(address + '/' + userCode) // WebSocket对应的地址 // imsocket = new WebSocket('ws://172.16.102.90:8502/ws/' + userCode) imsocket.onopen = () => { console.log('IMscoket建立成功') // 服务端有发心跳并有返回 obj.imFlag = true obj.xw = xw reconnect = 0 imHeats() } imsocket.onmessage = obj.message imsocket.onclose = obj.close imsocket.onerror = obj.error obj.msgfn = msgCallback obj.callBack = callBack callBack && callBack(imsocket) } }) }, send (data) { try { if (imsocket && obj.imFlag) { imsocket.send(JSON.stringify(data)) } else { throw new xw.BaseException(433, `im消息发送失败:im未登录`) } } catch (e) { throw new xw.BaseException(433, `im消息发送失败:${e}`) } }, sendMyDate (item) { let params = { flags: item.flags, fromUserId: item.fromUserId, msgContent: item.msgContent, msgId: item.msgId, msgType: item.msgType, toUserId: item.toUserId } obj.send(params) }, message (data) { let msg = data.data msg = typeof (msg) === 'string' ? JSON.parse(msg) : msg let userCode = obj.xw.userInfo['USER_CODE'] switch (msg.flags) { case 1: // 个人-消息到达 EventBus.$emit(OnIMMessage, msg) // 第二次握手 let userMsg = '{"flags":101,"toUserId":"' + userCode + '","msgId":"' + msg.msgId + '"}' imsocket.send(userMsg) break case 2: // 群组-消息到达 // 第二次握手 let groupMsg = '{"flags":101,"toUserId":"' + userCode + '","msgId":"' + msg.msgId + '"}' imsocket.send(groupMsg) break case 100: // 心跳 let heats = '{"flags":100,"toUserId":' + userCode + '}' imsocket.send(heats) break case 101: // 清除掉消息发送的加载图标 EventBus.$emit(OnComfirmIM, msg) // 第三次握手 let hasGot = '{"fromUserId":"' + userCode + '","msgContent":"' + msg.msgContent + '"}' imsocket.send(hasGot) break case 102: // 消息已读 EventBus.$emit(OnIMRead, msg) let hasGet = '{"flags":101,"toUserId":"' + userCode + '","msgId":"' + msg.msgId + '"}' imsocket && imsocket.send(hasGet) break } obj.msgfn && obj.msgfn(msg) return msg }, close () { console.log('im socket close') if (reconnect <= maxReconnect) { obj.imFlag = false setTimeout(() => { imsocket = null reconnect++ obj.init(obj.callBack, obj.msgfn) }, 5000) } }, error () { // console.error('im socket error') // obj.imFlag = false // setTimeout(() => { // imsocket = null // obj.init() // }, 5000) } } // socket心跳 let imHeats = function () { // heatImTimer && clearInterval(heatImTimer) // if (!imsocket) { // return false // } // heatImTimer = setInterval(() => { // obj.send({ flags: 100 }) // }, heatImTime * 1000) } export default obj