From ef503a0ef5a86ead59d0dc539ff35497d091e4e7 Mon Sep 17 00:00:00 2001 From: Luk Lu Date: Mon, 23 Mar 2020 19:56:47 +0800 Subject: [PATCH] add unisocket --- unisocket/unisocket.js | 63 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 unisocket/unisocket.js diff --git a/unisocket/unisocket.js b/unisocket/unisocket.js new file mode 100644 index 0000000..2e0684c --- /dev/null +++ b/unisocket/unisocket.js @@ -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 + } +} \ No newline at end of file