¶Ô±ÈÐÂÎļþ |
| | |
| | | // 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è§£æå¤±è´¥ï¼', 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 æ¶æ¯çå¬å¤±è´¥ï¼ä¼ å
¥ç忰䏿¯ä¸ä¸ªæ¹æ³'); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è§£é¤ WebSocket æ¶æ¯çå¬ |
| | | * |
| | | * @param callback |
| | | */ |
| | | export function offWebSocket(callback: (data: object) => any) { |
| | | listeners.delete(callback); |
| | | } |
| | | |
| | | export function useMyWebSocket() { |
| | | return result; |
| | | } |