From 6584cbef8a5829950c20b507e17445b97650e73f Mon Sep 17 00:00:00 2001
From: hcong <1050828145@qq.com>
Date: 星期三, 27 十一月 2024 12:15:04 +0800
Subject: [PATCH] 1. 新增消息管理类 2. socket消息类型js改为枚举类 3. 重连函数在使用时以参数传递进来

---
 src/socket/FYWebSocket.js |   48 +++++++++++++++++++++++-------------------------
 1 files changed, 23 insertions(+), 25 deletions(-)

diff --git a/src/socket/FYWebSocket.js b/src/socket/FYWebSocket.js
index 80f00c3..0243462 100644
--- a/src/socket/FYWebSocket.js
+++ b/src/socket/FYWebSocket.js
@@ -1,9 +1,4 @@
-import eventBus from './eventBus.js';
-import {
-  messageTypes,
-  getByValue,
-  isHeartbeatMessageByType
-} from '@/enum/socketMessage.js';
+import { SOCKET_MESSAGE_TYPE, getByValue } from '@/enum/socketMessage.js';
 import { encodeMessage, decodeMessage } from './socketMessage.js';
 import { $socket_base_url } from '@/api/index.js';
 class FYWebSocket extends WebSocket {
@@ -16,15 +11,22 @@
    *    time: 蹇冭烦鏃堕棿闂撮殧
    *    timeout: 蹇冭烦瓒呮椂闂撮殧
    *    reconnect: 鏂嚎閲嶈繛鏃堕棿闂撮殧
-   * isReconnect 鏄惁鏂嚎閲嶈繛
+   * reconnectFunc 鏂嚎閲嶈繛鍑芥暟
+   * messageManager 娑堟伅绠$悊鍣�
    */
-  init(heartBeatConfig, isReconnect) {
+  init(reconnectFunc, messageManager) {
     this.onopen = this.openHandler; // 杩炴帴鎴愬姛鍚庣殑鍥炶皟鍑芥暟
     this.onclose = this.closeHandler; // 杩炴帴鍏抽棴鍚庣殑鍥炶皟 鍑芥暟
     this.onmessage = this.messageHandler; // 鏀跺埌鏈嶅姟鍣ㄦ暟鎹悗鐨勫洖璋冨嚱鏁�
     this.onerror = this.errorHandler; // 杩炴帴鍙戠敓閿欒鐨勫洖璋冩柟娉�
-    this.heartBeatConfig = heartBeatConfig; // 蹇冭烦杩炴帴閰嶇疆鍙傛暟
-    this.isReconnect = isReconnect; // 璁板綍鏄惁鏂嚎閲嶈繛
+    this.heartBeatConfig = {
+      time: 30 * 1000,
+      timeout: 2 * 1000,
+      reconnect: 30 * 1000
+    }; // 蹇冭烦杩炴帴閰嶇疆鍙傛暟
+    this.isReconnect = typeof reconnectFunc === 'function'; // 璁板綍鏄惁鏂嚎閲嶈繛
+    this.reconnectFunc = reconnectFunc; // 鏂嚎閲嶈繛鍑芥暟
+    this.messageManager = messageManager; // 娑堟伅澶勭悊绠$悊鍣�
     this.reconnectTimer = null; // 璁板綍鏂嚎閲嶈繛鐨勬椂闂村櫒
     this.startHeartBeatTimer = null; // 璁板綍蹇冭烦鏃堕棿鍣�
     this.webSocketState = false; // 璁板綍socket杩炴帴鐘舵�� true涓哄凡杩炴帴
@@ -39,7 +41,7 @@
   }
   // 杩炴帴鎴愬姛鍚庣殑鍥炶皟鍑芥暟
   openHandler() {
-    console.log('====onopen 杩炴帴鎴愬姛====');
+    console.log('====onopen websocket杩炴帴鎴愬姛====');
     // socket鐘舵�佽缃负杩炴帴锛屽仛涓哄悗闈㈢殑鏂嚎閲嶈繛鐨勬嫤鎴櫒
     this.webSocketState = true;
     // 鍒ゆ柇鏄惁鍚姩蹇冭烦鏈哄埗
@@ -53,22 +55,17 @@
     if (!(webSocketMsg && webSocketMsg != null && webSocketMsg != {})) {
       return;
     }
-    console.log("webSocketMsg", webSocketMsg);
-    
     const type = webSocketMsg.type;
     const data = webSocketMsg.data;
     let typeObj = getByValue(type);
-    console.log("typeObj", typeObj);
-    
-    if (isHeartbeatMessageByType(type)) {
+    if (type == 0) {
       // 灏嗚繛鎺ョ姸鎬佹洿鏂颁负鍦ㄧ嚎
       this.webSocketState = true;
-      eventBus.emit(typeObj.name, data);
-      console.log('====onmessage 蹇冭烦妫�娴�====', data);
+      console.log('====onmessage websocket蹇冭烦妫�娴�====', data);
     } else {
       // 鍙戦�佷簨浠�
-      eventBus.emit(typeObj.name, data);
-      console.log(`====onmessage ${typeObj.label}====`, data);
+      this.messageManager.emit(typeObj.name, data);
+      console.log(`====onmessage websocket${typeObj.label}====`, data);
     }
   }
   // 杩炴帴鍏抽棴鍚庣殑鍥炶皟 鍑芥暟
@@ -93,7 +90,7 @@
   startHeartBeat(time) {
     this.startHeartBeatTimer = setTimeout(() => {
       // 瀹㈡埛绔瘡闅斾竴娈垫椂闂村悜鏈嶅姟绔彂閫佷竴涓績璺虫秷鎭�
-      this.sendMessage(messageTypes[0].value, Date.now());
+      this.sendMessage('0', Date.now());
       this.waitingServer();
     }, time);
   }
@@ -106,12 +103,12 @@
         this.startHeartBeat(this.heartBeatConfig.time);
         return;
       }
-      console.log('蹇冭烦鏃犲搷搴�, 宸茬粡鍜屾湇鍔$鏂嚎');
+      console.log('websocket 蹇冭烦鏃犲搷搴�, 宸茬粡鍜屾湇鍔$鏂嚎');
       // 閲嶆柊杩炴帴鏃讹紝璁板緱瑕佸厛鍏抽棴褰撳墠杩炴帴
       try {
         this.close();
       } catch (error) {
-        console.log('褰撳墠杩炴帴宸茬粡鍏抽棴');
+        console.log('websocket 褰撳墠杩炴帴宸茬粡鍏抽棴');
       }
       // // 閲嶆柊杩炴帴
       // this.reconnectWebSocket()
@@ -126,8 +123,9 @@
     }
     // 鏍规嵁浼犲叆鐨勬柇绾块噸杩炴椂闂撮棿闅� 寤舵椂杩炴帴
     this.reconnectTimer = setTimeout(() => {
-      // 瑙﹀彂閲嶆柊杩炴帴浜嬩欢
-      eventBus.emit('reconnect');
+      // 瑙﹀彂閲嶆柊杩炴帴鍑芥暟
+      console.log('====onerror websocket灏濊瘯閲嶈繛====');
+      this.reconnectFunc();
     }, this.heartBeatConfig.reconnect);
   }
 }

--
Gitblit v1.9.3