add unisocket
This commit is contained in:
parent
c10fabab77
commit
ef503a0ef5
63
unisocket/unisocket.js
Normal file
63
unisocket/unisocket.js
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
const my = {
|
||||||
|
socket : undefined,
|
||||||
|
reconnecting: undefined,
|
||||||
|
listeners: {}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports={
|
||||||
|
initSocket(){
|
||||||
|
if (!my.socket || my.socket.readyState!==my.socket.OPEN && getApp()._SS.nodeHost) {
|
||||||
|
console.log('WebSocket connecting...')
|
||||||
|
my.socket = uni.connectSocket({
|
||||||
|
url: getApp()._SS.nodeHost.replace(/^http/, 'ws'),
|
||||||
|
complete: ()=>{}
|
||||||
|
})
|
||||||
|
my.socket.onOpen((res)=>{
|
||||||
|
console.log('WebSocket onOpen: ', res)
|
||||||
|
clearInterval(my.reconnecting)
|
||||||
|
delete my.reconnecting
|
||||||
|
})
|
||||||
|
my.socket.onClose((res)=>{
|
||||||
|
console.log('Websocket onClose: ', res)
|
||||||
|
if (!my.reconnecting)
|
||||||
|
my.reconnecting = setInterval(()=>{
|
||||||
|
console.log(new Date(), 'WebSocket reconnecting...')
|
||||||
|
this.initSocket()
|
||||||
|
}, 5000) // 每5秒尝试重连
|
||||||
|
})
|
||||||
|
my.socket.onError((err)=>{
|
||||||
|
console.log('Websocket onError: ', err)
|
||||||
|
})
|
||||||
|
my.socket.onMessage(({data})=>{ // 在这里统一分发消息
|
||||||
|
try {
|
||||||
|
let dataObj = JSON.parse(data)
|
||||||
|
console.log('WebSocket onMessage for event: ', dataObj.event)
|
||||||
|
let listeners = my.listeners[dataObj.event] || []
|
||||||
|
for (let listener of listeners) {
|
||||||
|
listener(dataObj)
|
||||||
|
}
|
||||||
|
}catch(exception){
|
||||||
|
console.log(new Date(), 'unknown message', data)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return my.socket
|
||||||
|
},
|
||||||
|
closeSocket(){
|
||||||
|
my.socket.close()
|
||||||
|
setTimeout(()=>{
|
||||||
|
clearInterval(my.reconnecting)
|
||||||
|
delete my.reconnecting
|
||||||
|
}, 2000)
|
||||||
|
},
|
||||||
|
addListener(event, listener){
|
||||||
|
if (Array.isArray(my.listeners[event]) && typeof(listener)==='function') {
|
||||||
|
my.listeners[event].push(listener)
|
||||||
|
}else {
|
||||||
|
my.listeners[event]=[listener]
|
||||||
|
}
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user