From 6d4e9ccb34e0292bfadba7bfd678231cb37ae8c0 Mon Sep 17 00:00:00 2001
From: qx <1084500556@qq.com>
Date: 星期三, 02 七月 2025 15:45:16 +0800
Subject: [PATCH] :qx

---
 src/utils/websocket.js |   80 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 80 insertions(+), 0 deletions(-)

diff --git a/src/utils/websocket.js b/src/utils/websocket.js
new file mode 100644
index 0000000..a525f68
--- /dev/null
+++ b/src/utils/websocket.js
@@ -0,0 +1,80 @@
+// src/utils/websocket.js
+let socket = null;
+let reconnectAttempts = 0;
+const maxReconnectAttempts = 5;
+const reconnectInterval = 5000;
+let messageCallback = null;
+
+const initWebSocket = (token, callback) => {
+  if (socket && socket.readyState === WebSocket.OPEN) {
+    console.log('WebSocket 宸茶繛鎺ワ紝鏃犻渶閲嶅鍒濆鍖�');
+    return;
+  }
+
+  if (!token) {
+    console.error('鏈彁渚� token锛屾棤娉曞缓绔� WebSocket 杩炴帴');
+    callback('error', '鏈壘鍒� token锛屾棤娉曞缓绔� WebSocket 杩炴帴');
+    return;
+  }
+
+  const wsUrl = `ws://192.168.1.2:5011/ws?token=${encodeURIComponent(token)}`;
+  console.log('灏濊瘯杩炴帴 WebSocket:', wsUrl);
+
+  try {
+    socket = new WebSocket(wsUrl);
+  } catch (error) {
+    console.error('WebSocket 鍒濆鍖栧け璐�:', error);
+    callback('error', '鏃犳硶鍒濆鍖� WebSocket 杩炴帴');
+    return;
+  }
+
+  messageCallback = callback;
+
+  socket.onopen = () => {
+    console.log('WebSocket 杩炴帴鎴愬姛');
+    reconnectAttempts = 0;
+  };
+
+  socket.onmessage = (event) => {
+    console.log('WebSocket 鏀跺埌鍘熷娑堟伅:', event.data);
+    if (messageCallback) {
+      messageCallback('message', event.data);
+    }
+  };
+
+  socket.onerror = (error) => {
+    console.error('WebSocket 閿欒:', error);
+    if (messageCallback) {
+      messageCallback('error', 'WebSocket 杩炴帴閿欒');
+    }
+  };
+
+  socket.onclose = (event) => {
+    console.log('WebSocket 杩炴帴鍏抽棴锛屼唬鐮�:', event.code, '鍘熷洜:', event.reason);
+    if (reconnectAttempts < maxReconnectAttempts) {
+      setTimeout(() => {
+        console.log(`灏濊瘯閲嶈繛 (${reconnectAttempts + 1}/${maxReconnectAttempts})`);
+        reconnectAttempts++;
+        initWebSocket(token, callback);
+      }, reconnectInterval);
+    } else {
+      if (messageCallback) {
+        messageCallback('error', 'WebSocket 閲嶈繛澶辫触锛岃妫�鏌ョ綉缁滄垨鏈嶅姟鍣�');
+      }
+    }
+  };
+};
+
+const closeWebSocket = () => {
+  if (socket) {
+    socket.close(1000, '娴忚鍣ㄥ叧闂紝姝e父鏂紑');
+    socket = null;
+    console.log('WebSocket 杩炴帴宸插叧闂�');
+  }
+};
+
+window.addEventListener('beforeunload', () => {
+  closeWebSocket();
+});
+
+export { initWebSocket, closeWebSocket };
\ No newline at end of file

--
Gitblit v1.8.0