From fa3ac93010bea3805438ee3ab0a182bfbf7423da Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期一, 27 五月 2024 16:19:31 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/hooks/web/useWebSocket.ts | 98 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 98 insertions(+), 0 deletions(-) diff --git a/src/hooks/web/useWebSocket.ts b/src/hooks/web/useWebSocket.ts new file mode 100644 index 0000000..d7ca153 --- /dev/null +++ b/src/hooks/web/useWebSocket.ts @@ -0,0 +1,98 @@ +// noinspection JSUnusedGlobalSymbols + +import { unref } from 'vue'; +import { useWebSocket, WebSocketResult } from '@vueuse/core'; +import { getToken } from '/@/utils/auth'; + +let result: WebSocketResult<any>; +const listeners = new Map(); + +/** + * 寮�鍚� WebSocket 閾炬帴锛屽叏灞�鍙渶鎵ц涓�娆� + * @param url + */ +export function connectWebSocket(url: string) { + console.log("杩炴帴websocket::", url) + //update-begin-author:taoyan date:2022-4-24 for: v2.4.6 鐨� websocket 鏈嶅姟绔紝瀛樺湪鎬ц兘鍜屽畨鍏ㄩ棶棰樸�� #3278 + let token = (getToken() || '') as string; + result = useWebSocket(url, { + // 鑷姩閲嶈繛 (閬囧埌閿欒鏈�澶氶噸澶嶈繛鎺�10娆�) + autoReconnect: { + retries : 10, + delay : 5000 + }, + // 蹇冭烦妫�娴� + heartbeat: { + message: "ping", + interval: 55000 + }, + protocols: [token], + }); + //update-end-author:taoyan date:2022-4-24 for: v2.4.6 鐨� websocket 鏈嶅姟绔紝瀛樺湪鎬ц兘鍜屽畨鍏ㄩ棶棰樸�� #3278 + if (result) { + result.open = onOpen; + result.close = onClose; + + const ws = unref(result.ws); + if(ws!=null){ + ws.onerror = onError; + ws.onmessage = onMessage; + } + } +} + +function onOpen() { + console.log('[WebSocket] 杩炴帴鎴愬姛'); +} + +function onClose(e) { + console.log('[WebSocket] 杩炴帴鏂紑锛�', e); +} + +function onError(e) { + console.log('[WebSocket] 杩炴帴鍙戠敓閿欒: ', e); +} + +function onMessage(e) { + console.debug('[WebSocket] -----鎺ユ敹娑堟伅-------', e.data); + try { + const data = JSON.parse(e.data); + for (const callback of listeners.keys()) { + try { + callback(data); + } catch (err) { + console.error(err); + } + } + } catch (err) { + console.error('[WebSocket] data瑙f瀽澶辫触锛�', err); + } +} + + +/** + * 娣诲姞 WebSocket 娑堟伅鐩戝惉 + * @param callback + */ +export function onWebSocket(callback: (data: object) => any) { + if (!listeners.has(callback)) { + if (typeof callback === 'function') { + listeners.set(callback, null); + } else { + console.debug('[WebSocket] 娣诲姞 WebSocket 娑堟伅鐩戝惉澶辫触锛氫紶鍏ョ殑鍙傛暟涓嶆槸涓�涓柟娉�'); + } + } +} + +/** + * 瑙i櫎 WebSocket 娑堟伅鐩戝惉 + * + * @param callback + */ +export function offWebSocket(callback: (data: object) => any) { + listeners.delete(callback); +} + +export function useMyWebSocket() { + return result; +} -- Gitblit v1.9.3