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