fcc-core
Version:
Fusion communication center.
149 lines (144 loc) • 4.2 kB
JavaScript
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