290144e9
易尊强
第一次
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
import Vue from 'vue'
import define from '@/utils/define'
import store from '@/store'
const Socket = {
contime: 0,
ws: null,
initSocket() {
try {
Socket.ws = uni.connectSocket({
url: define.webSocketUrl,
success() {
// console.log("websocket连接成功")
},
});
store.state.chat.socket = Socket.ws
uni.onSocketOpen(res => {
const token = uni.getStorageSync('token') || ''
Socket.contime = 0
const msg = JSON.stringify({
method: "OnConnection",
token,
mobileDevice: true
});
Socket.sendMsg(msg)
});
uni.onSocketError(res => {
store.state.chat.socket = 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)
});
uni.onSocketClose(res => {
store.state.chat.socket = null
});
uni.onSocketMessage(res => {
const data = JSON.parse(res.data)
switch (data.method) {
case "initMessage": //初始化
const msgInfo = {
noticeText: data.noticeDefaultText,
messageText: data.messageDefaultText,
messageCount: data.unreadMessageCount,
noticeCount: data.unreadNoticeCount,
noticeDate: data.noticeDefaultTime || 0,
messageDate: data.messageDefaultTime || 0
}
let badgeNum = data.unreadMessageCount + data.unreadNoticeCount
for (let i = 0; i < data.unreadNums.length; i++) {
badgeNum = badgeNum + data.unreadNums[i].unreadNum
}
store.commit('chat/SET_BADGE_NUM', badgeNum)
store.commit('chat/SET_MSGINFO', msgInfo)
break;
case "Online": //在线用户
break;
case "Offline": //离线用户
break;
case "sendMessage": //发送消息
store.dispatch('chat/sendMessage', data)
break;
case "receiveMessage": //接收消息
store.dispatch('chat/receiveMessage', data)
break;
case "messageList": //消息列表
store.dispatch('chat/getMessageList', data)
break;
case "messagePush": //消息推送
store.dispatch('chat/messagePush', data)
break;
case "logout":
uni.showToast({
title: data.msg || '登录已过期',
icon: 'none',
complete: () => {
setTimeout(() => {
store.dispatch('user/resetToken').then(() => {
uni.reLaunch({
url: '/pages/login/index'
})
})
}, 1500)
}
})
break;
default:
break;
}
});
} catch (e) {}
},
sendMsg(msg) {
uni.sendSocketMessage({
data: msg,
fail: (e) => {
Socket.reConnect()
}
})
},
//重连
reConnect() {
Socket.initSocket()
},
};
export default Socket
|