73 lines
2.0 KiB
JavaScript
73 lines
2.0 KiB
JavaScript
import SockJS from 'sockjs-client'
|
|
import Stomp from 'stompjs'
|
|
|
|
import apiConfig from '~/config/api.config'
|
|
|
|
export default {
|
|
socket: null,
|
|
stompClient: null,
|
|
headers: null,
|
|
successCallback() {
|
|
let _ts = this;
|
|
_ts.stompClient.subscribe(`/user/${_ts.headers.id}/message`, (msg) => {
|
|
let message = JSON.parse(msg.body);
|
|
console.log(message.dataType)
|
|
switch (message.dataType) {
|
|
case 0:
|
|
console.log(message.content)
|
|
break;
|
|
case 1:
|
|
console.log(message.to)
|
|
break;
|
|
default:
|
|
console.log(message)
|
|
}
|
|
}, _ts.headers);
|
|
_ts.stompClient.subscribe('/topic/greening', (msg) => {
|
|
console.log('pub', JSON.parse(msg.body));
|
|
});
|
|
},
|
|
initSocket: function (user) {
|
|
let _ts = this;
|
|
_ts.socket = new SockJS(apiConfig.SOCKET);
|
|
_ts.stompClient = Stomp.over(_ts.socket);
|
|
let headers = {
|
|
id: user.nickname
|
|
}
|
|
_ts.headers = headers;
|
|
_ts.stompClient.connect(_ts.headers, () => {
|
|
_ts.successCallback();
|
|
}, (err) => {
|
|
console.log(err)
|
|
_ts.reconnect(apiConfig.SOCKET, _ts.successCallback)
|
|
})
|
|
},
|
|
// 断开重连使用定时器定时连接服务器
|
|
reconnect(socketUrl, successCallback) {
|
|
console.info('in reconnect function')
|
|
let connected = false
|
|
let _ts = this
|
|
const reconInv = setInterval(() => {
|
|
console.info('in interval' + Math.random())
|
|
_ts.socket = new SockJS(socketUrl)
|
|
_ts.stompClient = Stomp.over(this.socket)
|
|
_ts.stompClient.connect({}, (frame) => {
|
|
console.info('reconnected success')
|
|
// 连接成功,清除定时器
|
|
clearInterval(reconInv)
|
|
connected = true
|
|
successCallback()
|
|
}, () => {
|
|
console.info('reconnect failed')
|
|
console.info('connected:' + connected)
|
|
if (connected) {
|
|
console.info('connect .... what?')
|
|
}
|
|
})
|
|
}, 2000)
|
|
},
|
|
sendMessage: function (message) {
|
|
this.stompClient.send('/app/message', {}, JSON.stringify(message))
|
|
}
|
|
}
|