mirror of
https://gitee.com/myxzgzs/boyue_jnpf.git
synced 2025-08-10 00:02:41 +08:00
171 lines
4.1 KiB
JavaScript
171 lines
4.1 KiB
JavaScript
![]() |
import define from '@/utils/define'
|
|||
|
import jnpf from '@/utils/jnpf'
|
|||
|
import {
|
|||
|
useChatStoreWithOut
|
|||
|
} from '@/store/modules/chat'
|
|||
|
import {
|
|||
|
useUserStore
|
|||
|
} from '@/store/modules/user'
|
|||
|
|
|||
|
const chatStore = useChatStoreWithOut()
|
|||
|
const userStore = useUserStore()
|
|||
|
let socketTask = false
|
|||
|
const Socket = {
|
|||
|
conTime: 0,
|
|||
|
initSocket() {
|
|||
|
try {
|
|||
|
const token = uni.getStorageSync('token') || ''
|
|||
|
const sys = uni.getStorageSync('systemInfo') || ''
|
|||
|
const userInfo = uni.getStorageSync('userInfo') || {}
|
|||
|
socketTask = uni.connectSocket({
|
|||
|
url: define.webSocketUrl + '/' + encodeURIComponent(token),
|
|||
|
// #ifdef APP
|
|||
|
header: {
|
|||
|
'User-Agent': sys
|
|||
|
},
|
|||
|
// #endif
|
|||
|
success() {
|
|||
|
setTimeout(() => chatStore.setSocket(socketTask), 0)
|
|||
|
},
|
|||
|
});
|
|||
|
socketTask.onMessage((res) => {
|
|||
|
let dataStr = res.data;
|
|||
|
const data = JSON.parse(dataStr)
|
|||
|
let options = {
|
|||
|
cover: false,
|
|||
|
sound: 'system',
|
|||
|
title: data.title
|
|||
|
};
|
|||
|
switch (data.method) {
|
|||
|
case "initMessage": //初始化
|
|||
|
const msgInfo = {
|
|||
|
messageText: data.messageDefaultText || '暂无数据',
|
|||
|
messageCount: data.unreadMessageCount + data.unreadSystemMessageCount < 0 ?
|
|||
|
0 : data.unreadMessageCount + data.unreadSystemMessageCount + data
|
|||
|
.unreadScheduleCount,
|
|||
|
messageDate: data.messageDefaultTime || 0,
|
|||
|
}
|
|||
|
let badgeNum = data.unreadTotalCount
|
|||
|
for (let i = 0; i < data.unreadNums.length; i++) {
|
|||
|
badgeNum = badgeNum + data.unreadNums[i].unreadNum
|
|||
|
}
|
|||
|
chatStore.setBadgeNum(badgeNum)
|
|||
|
chatStore.setMsgInfo(msgInfo)
|
|||
|
break;
|
|||
|
case "Online": //在线用户
|
|||
|
|
|||
|
break;
|
|||
|
case "Offline": //离线用户
|
|||
|
|
|||
|
break;
|
|||
|
case "sendMessage": //发送消息
|
|||
|
chatStore.sendMessage(data)
|
|||
|
break;
|
|||
|
case "receiveMessage": //接收消息
|
|||
|
// #ifdef APP
|
|||
|
plus.push.createMessage('你有一条聊天消息', {
|
|||
|
...data,
|
|||
|
messageType: 100
|
|||
|
}, options);
|
|||
|
// #endif
|
|||
|
chatStore.receiveMessage(data)
|
|||
|
break;
|
|||
|
case "messageList": //消息列表
|
|||
|
chatStore.getMessageList(data)
|
|||
|
break;
|
|||
|
case "messagePush": //消息推送
|
|||
|
// #ifdef APP
|
|||
|
let content = "公告"
|
|||
|
if (data.messageType == 2) content = '流程'
|
|||
|
if (data.messageType == 3) content = '系统'
|
|||
|
if (data.messageType == 4) content = '日程'
|
|||
|
plus.push.createMessage(`你有一条${content}消息`, data, options);
|
|||
|
// #endif
|
|||
|
chatStore.messagePush(data)
|
|||
|
break;
|
|||
|
case "closeSocket": //断开websocket连接
|
|||
|
Socket.close()
|
|||
|
break;
|
|||
|
case "logout":
|
|||
|
uni.showToast({
|
|||
|
title: data.msg || '登录已过期',
|
|||
|
icon: 'none',
|
|||
|
complete: () => {
|
|||
|
setTimeout(() => {
|
|||
|
userStore.resetToken()
|
|||
|
setTimeout(() => {
|
|||
|
Socket.close()
|
|||
|
uni.reLaunch({
|
|||
|
url: '/pages/login/index'
|
|||
|
})
|
|||
|
}, 500)
|
|||
|
}, 1000)
|
|||
|
}
|
|||
|
})
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
socketTask.onOpen((data) => {
|
|||
|
Socket.conTime = 0
|
|||
|
const msg = JSON.stringify({
|
|||
|
method: "OnConnection",
|
|||
|
token,
|
|||
|
mobileDevice: true,
|
|||
|
systemId: userInfo.appSystemId
|
|||
|
});
|
|||
|
Socket.sendMsg(msg)
|
|||
|
})
|
|||
|
|
|||
|
socketTask.onClose((data) => {
|
|||
|
socketTask = false
|
|||
|
chatStore.setSocket(null)
|
|||
|
})
|
|||
|
|
|||
|
socketTask.onError((data) => {
|
|||
|
chatStore.setSocket(null)
|
|||
|
setTimeout(() => {
|
|||
|
Socket.conTime += 1
|
|||
|
if (Socket.conTime <= 10) {
|
|||
|
if (Socket.conTime >= 3) {
|
|||
|
uni.showToast({
|
|||
|
title: 'IM通讯正在连接:' + '连接第' + Socket.conTime + '次!稍后...',
|
|||
|
icon: 'none'
|
|||
|
})
|
|||
|
}
|
|||
|
Socket.reConnect();
|
|||
|
} else {
|
|||
|
uni.showToast({
|
|||
|
title: 'IM通讯连接失败,联系服务器管理员',
|
|||
|
icon: 'none'
|
|||
|
})
|
|||
|
}
|
|||
|
}, 10)
|
|||
|
})
|
|||
|
} catch (e) {}
|
|||
|
},
|
|||
|
sendMsg(data) {
|
|||
|
if (socketTask === false) return Socket.reConnect()
|
|||
|
let content = data;
|
|||
|
socketTask.send({
|
|||
|
data: content,
|
|||
|
complete(e) {}
|
|||
|
})
|
|||
|
},
|
|||
|
//重连
|
|||
|
reConnect() {
|
|||
|
Socket.initSocket()
|
|||
|
},
|
|||
|
close() {
|
|||
|
socketTask.close({
|
|||
|
complete(e) {
|
|||
|
socketTask = false
|
|||
|
chatStore.setSocket(null)
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
export default Socket
|