forked from mengyxu/noob-components
6 changed files with 66 additions and 1 deletions
@ -0,0 +1,52 @@ |
|||||||
|
let websocket: WebSocket; |
||||||
|
const msgHandlersMap = {}; |
||||||
|
let lastUrl; |
||||||
|
let closeFlag = false; |
||||||
|
|
||||||
|
export const closeWebSocket = () => { |
||||||
|
closeFlag = false; |
||||||
|
websocket?.close(); |
||||||
|
}; |
||||||
|
|
||||||
|
export const sendSocketMsg = (msg) => { |
||||||
|
websocket?.send(JSON.stringify(msg)); |
||||||
|
}; |
||||||
|
|
||||||
|
export const openWebSocket = (url) => { |
||||||
|
if (websocket && websocket.readyState === WebSocket.OPEN) { |
||||||
|
if (lastUrl == url) { |
||||||
|
return; |
||||||
|
} |
||||||
|
closeWebSocket(); |
||||||
|
} |
||||||
|
websocket = new WebSocket(url); |
||||||
|
lastUrl = url; |
||||||
|
websocket.onopen = () => { |
||||||
|
console.log("websocket已连接"); |
||||||
|
closeFlag = true; |
||||||
|
}; |
||||||
|
websocket.onmessage = (msg) => { |
||||||
|
const event = JSON.parse(msg.data); |
||||||
|
const handlers = msgHandlersMap[event.type]; |
||||||
|
if (!handlers) { |
||||||
|
return; |
||||||
|
} |
||||||
|
Object.values(handlers).forEach((handler: any) => { |
||||||
|
handler(event.data); |
||||||
|
}); |
||||||
|
}; |
||||||
|
websocket.onclose = () => { |
||||||
|
console.log("websocket已断开"); |
||||||
|
if (closeFlag) { |
||||||
|
setTimeout(() => { |
||||||
|
openWebSocket(url); |
||||||
|
}, 2000); |
||||||
|
} |
||||||
|
}; |
||||||
|
}; |
||||||
|
|
||||||
|
export const registerHandler = (type, key, handler) => { |
||||||
|
const handlers = msgHandlersMap[type] || {}; |
||||||
|
handlers[key] = handler; |
||||||
|
msgHandlersMap[type] = handlers; |
||||||
|
}; |
||||||
Loading…
Reference in new issue