first init
This commit is contained in:
commit
d72d80d7db
16
.prettierrc.js
Normal file
16
.prettierrc.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
/*
|
||||||
|
对 VSCode Prettier 有效;建议一直要有本配置文件,否则不同版本的 Prettier 的默认配置会不同,例如 TrailingComma
|
||||||
|
对 VSCode Prettier Standard 无效,似乎是集成了不能修改的配置。
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
printWidth: 160, // default 80
|
||||||
|
tabWidth: 2, // default 2
|
||||||
|
useTabs: false,
|
||||||
|
semi: false, // default true
|
||||||
|
singleQuote: true, // default false
|
||||||
|
trailingComma: 'es5', // none (default in v 1.*), es5 (default in v2.0.0), all
|
||||||
|
bracketSpacing: true, // default true
|
||||||
|
jsxBracketSameLine: false, // default false
|
||||||
|
arrowParens: 'always', // avoid (default in v1.9.0), always (default since v2.0.0)
|
||||||
|
quoteProps: 'as-needed', // as-needed (default), consistent, preserve
|
||||||
|
}
|
82
index.js
Normal file
82
index.js
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
const my = {
|
||||||
|
socket : undefined,
|
||||||
|
reconnecting: undefined,
|
||||||
|
listeners: {}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports={
|
||||||
|
initSocket(url, reconnect=false){
|
||||||
|
if (!my.socket || my.socket.readyState!==my.socket.OPEN && typeof(url)==='string') {
|
||||||
|
console.log('WebSocket connecting...')
|
||||||
|
my.socket = uni.connectSocket({
|
||||||
|
url: url.replace(/^http/, 'ws'),
|
||||||
|
complete: ()=>{}
|
||||||
|
})
|
||||||
|
my.socket.onOpen((res)=>{
|
||||||
|
console.log('WebSocket onOpen: ', res)
|
||||||
|
clearInterval(my.reconnecting)
|
||||||
|
delete my.reconnecting
|
||||||
|
|
||||||
|
if (reconnect && uni.getStorageSync('_passtoken')) {
|
||||||
|
console.log('Reporting owner for reconnecting socket')
|
||||||
|
my.socket.send({data: JSON.stringify({skevent:'SOCKET_OWNER', _passtoken: uni.getStorageSync('_passtoken')})})
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
my.socket.onClose((res)=>{
|
||||||
|
console.log('Websocket onClose: ', res)
|
||||||
|
if (!my.reconnecting)
|
||||||
|
my.reconnecting = setInterval(()=>{
|
||||||
|
console.log(new Date().toJSON(), 'WebSocket reconnecting...')
|
||||||
|
this.initSocket(url, true)
|
||||||
|
}, 5000) // 每5秒尝试重连
|
||||||
|
})
|
||||||
|
my.socket.onError((err)=>{
|
||||||
|
console.log('Websocket onError: ', err)
|
||||||
|
})
|
||||||
|
my.socket.onMessage(({data})=>{ // 在这里统一分发消息(用户端通常不需要返回结果给服务器,因此不用 rpc 模式,而用 event 模式。
|
||||||
|
try {
|
||||||
|
let dataObj = JSON.parse(data)
|
||||||
|
console.log('WebSocket onMessage for skevent: ', dataObj.skevent)
|
||||||
|
let listeners = my.listeners[dataObj.skevent] || []
|
||||||
|
for (let listener of listeners) {
|
||||||
|
listener(dataObj)
|
||||||
|
}
|
||||||
|
}catch(exception){
|
||||||
|
console.log(new Date().toJSON(), 'unknown message', data)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return my.socket
|
||||||
|
},
|
||||||
|
closeSocket(){
|
||||||
|
if (my.socket) my.socket.close()
|
||||||
|
setTimeout(()=>{
|
||||||
|
clearInterval(my.reconnecting)
|
||||||
|
delete my.reconnecting
|
||||||
|
}, 2000)
|
||||||
|
},
|
||||||
|
addListener(skevent, listener){
|
||||||
|
if (Array.isArray(my.listeners[skevent]) && typeof(listener)==='function') {
|
||||||
|
my.listeners[skevent].push(listener)
|
||||||
|
}else {
|
||||||
|
my.listeners[skevent]=[listener]
|
||||||
|
}
|
||||||
|
return this
|
||||||
|
},
|
||||||
|
countListener(skevent){
|
||||||
|
if (Array.isArray(my.listeners[skevent])) {
|
||||||
|
return my.listeners[skevent].length
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
},
|
||||||
|
sendObject(dataObj){
|
||||||
|
if (my.socket && my.socket.readyState===my.socket.OPEN){
|
||||||
|
my.socket.send({
|
||||||
|
data: typeof(dataObj)!=='string' ? JSON.stringify(dataObj) : dataObj
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
package.json
Normal file
15
package.json
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"name": "unip.socket",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.faronear.org/npm/unip.socket.git"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user