123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- 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
|