You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.0 KiB
43 lines
1.0 KiB
let websocket: WebSocket; |
|
const msgHandlersMap = {}; |
|
let lastUrl; |
|
let closeFlag = false; |
|
export const openWebSocket = (url) => { |
|
if (websocket && websocket.readyState === WebSocket.OPEN) { |
|
if (lastUrl == url) { |
|
return; |
|
} |
|
closeFlag = false; |
|
websocket.close(); |
|
} |
|
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; |
|
};
|
|
|