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