From 6fdacca914ef38e6cc91292ef07c5af32bd92991 Mon Sep 17 00:00:00 2001
From: hcong <1050828145@qq.com>
Date: 星期二, 03 十二月 2024 11:12:40 +0800
Subject: [PATCH] 1. BgTask增加onStatusChange参数,通过外界传递如何发送状态改变的消息 2. BackgroundTaskCtrl.kt 创建了BgTask对象并传递了onStatusChange参数 3. WebSocketMessageUtil 类名修改为 WebSocketMessageDecoder 4. SendWebSocketMessageUtil 类名修改为 WebSocketSendMessageUtil

---
 /dev/null                                                                            |   20 ----------
 src/main/kotlin/cn/flightfeather/supervision/socket/WebSocketSendMessageUtil.java    |   18 +++++++++
 src/main/kotlin/cn/flightfeather/supervision/socket/processor/WebSocketReceiver.kt   |    4 +-
 src/main/kotlin/cn/flightfeather/supervision/common/executor/BackgroundTaskCtrl.kt   |   12 ++---
 src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTask.kt               |    3 +
 src/main/kotlin/cn/flightfeather/supervision/socket/config/SPTextWebSocketHandler.kt |    4 +-
 src/main/kotlin/cn/flightfeather/supervision/socket/WebSocketMessageDecoder.java     |    9 ++--
 7 files changed, 34 insertions(+), 36 deletions(-)

diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/executor/BackgroundTaskCtrl.kt b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BackgroundTaskCtrl.kt
index 730c3a6..492e15e 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/common/executor/BackgroundTaskCtrl.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BackgroundTaskCtrl.kt
@@ -1,7 +1,7 @@
 package cn.flightfeather.supervision.common.executor
 
 import cn.flightfeather.supervision.common.exception.BizException
-import cn.flightfeather.supervision.common.utils.SendSocketMessageUtil
+import cn.flightfeather.supervision.socket.WebSocketSendMessageUtil
 import org.springframework.stereotype.Component
 import java.util.concurrent.ConcurrentHashMap
 import java.util.concurrent.Executors
@@ -38,7 +38,10 @@
                 throw BizException("鏃犳硶閲嶅鍒涘缓浠诲姟")
             }
         }
-        val t = BgTask(type, id, name, task)
+        val t = BgTask(type, id, name, task) { status ->
+            // 鍙戦�佹秷鎭�
+            WebSocketSendMessageUtil.sendBgTaskMessage(status)
+        }
         taskSet[id] = t
         return t
     }
@@ -65,10 +68,7 @@
             task.ready()
             task.future = executorService.submit {
                 task.execute()
-                println(task.taskStatus.runTime)
-                SendSocketMessageUtil.sendBgTaskMessage(task.taskStatus)
             }
-            SendSocketMessageUtil.sendBgTaskMessage(task.taskStatus)
             return task
         }
     }
@@ -117,13 +117,11 @@
         return if (id != null) {
             val task = taskMap[id] ?: throw BizException("鏃犳硶鍏抽棴浠诲姟锛屼换鍔${id}]涓嶅瓨鍦�")
             task.shutdown()
-            SendSocketMessageUtil.sendBgTaskMessage(task.taskStatus)
             listOf(task.taskStatus)
         } else {
             val res = mutableListOf<BgTaskStatus?>()
             taskMap.forEach { (t, u) ->
                 u.shutdown()
-                SendSocketMessageUtil.sendBgTaskMessage(u.taskStatus)
                 res.add(u.taskStatus)
             }
             res.sortedBy { it?.createTime }
diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTask.kt b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTask.kt
index 66a9315..2ed156b 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTask.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/common/executor/BgTask.kt
@@ -11,6 +11,7 @@
     val id: String,
     val name: String,
     private val task: () -> Boolean,
+    private val onStatusChange: (status: BgTaskStatus) -> Unit
 ) {
     var taskStatus = BgTaskStatus(type, id, name)
     var future: Future<*>? = null
@@ -33,11 +34,13 @@
     fun success() {
         taskStatus.status = TaskStatus.SUCCESS
         complete()
+        onStatusChange(taskStatus)
     }
 
     fun fail() {
         taskStatus.status = TaskStatus.FAIL
         complete()
+        onStatusChange(taskStatus)
     }
 
     fun shutdown() {
diff --git a/src/main/kotlin/cn/flightfeather/supervision/common/utils/SendSocketMessageUtil.java b/src/main/kotlin/cn/flightfeather/supervision/common/utils/SendSocketMessageUtil.java
deleted file mode 100644
index e4c9cfc..0000000
--- a/src/main/kotlin/cn/flightfeather/supervision/common/utils/SendSocketMessageUtil.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package cn.flightfeather.supervision.common.utils;
-
-import cn.flightfeather.supervision.common.executor.BgTaskStatus;
-import cn.flightfeather.supervision.socket.WebSocketMessage;
-import cn.flightfeather.supervision.socket.WebSocketMessageUtil;
-import cn.flightfeather.supervision.socket.WebSocketSenderHandler;
-
-public class SendSocketMessageUtil {
-
-    /**
-     * 鍙戦�佸悗鍙颁换鍔$殑socket娑堟伅
-     * @param bgTaskStatus 娑堟伅鐨勫唴瀹�
-     */
-    public static void sendBgTaskMessage(BgTaskStatus bgTaskStatus) {
-        WebSocketMessage webSocketMessage = new WebSocketMessage(Constant.SocketMessageType.BG_TASK.getValue(),
-                bgTaskStatus);
-        String message = WebSocketMessageUtil.encodeMessage(webSocketMessage);
-        WebSocketSenderHandler.getInstance().broadcast(message);
-    }
-}
diff --git a/src/main/kotlin/cn/flightfeather/supervision/socket/WebSocketMessageUtil.java b/src/main/kotlin/cn/flightfeather/supervision/socket/WebSocketMessageDecoder.java
similarity index 89%
rename from src/main/kotlin/cn/flightfeather/supervision/socket/WebSocketMessageUtil.java
rename to src/main/kotlin/cn/flightfeather/supervision/socket/WebSocketMessageDecoder.java
index 1a09218..7603ebc 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/socket/WebSocketMessageUtil.java
+++ b/src/main/kotlin/cn/flightfeather/supervision/socket/WebSocketMessageDecoder.java
@@ -3,9 +3,7 @@
 import cn.flightfeather.supervision.common.utils.JsonUtil;
 import org.springframework.util.StringUtils;
 
-import java.util.*;
-
-public class WebSocketMessageUtil {
+public class WebSocketMessageDecoder {
     private static final String START_STR = "##";
     private static final String SPLIT_STR = "&&";
     private static final String END_STR = "%%";
@@ -34,7 +32,8 @@
      */
     public static WebSocketMessage decodeMessage(String message) {
         if (!verificationMessage(message)) {
-            return null;
+            // 鍙戞尌涓�涓笉浼氳澶勭悊鐨勬秷鎭�
+            return new WebSocketMessage(-1, "");
         }
         WebSocketMessage webSocketMessage = new WebSocketMessage();
         String[] parts = message.substring(START_STR.length(), message.length() - END_STR.length()).split(SPLIT_STR);
@@ -47,6 +46,6 @@
      * @return 鐢熸垚鐨勬秷鎭瓧绗︿覆
      */
     public static String encodeMessage(WebSocketMessage webSocketMessage) {
-        return START_STR + webSocketMessage.getType() + SPLIT_STR + JsonUtil.INSTANCE.getGson().toJson(webSocketMessage.getContent()) + END_STR;
+        return START_STR + webSocketMessage.getType() + SPLIT_STR + JsonUtil.INSTANCE.getGson().toJson(webSocketMessage.getContent(), webSocketMessage.getContent().getClass()) + END_STR;
     }
 }
diff --git a/src/main/kotlin/cn/flightfeather/supervision/socket/WebSocketSendMessageUtil.java b/src/main/kotlin/cn/flightfeather/supervision/socket/WebSocketSendMessageUtil.java
new file mode 100644
index 0000000..5fa8920
--- /dev/null
+++ b/src/main/kotlin/cn/flightfeather/supervision/socket/WebSocketSendMessageUtil.java
@@ -0,0 +1,18 @@
+package cn.flightfeather.supervision.socket;
+
+import cn.flightfeather.supervision.common.executor.BgTaskStatus;
+import cn.flightfeather.supervision.common.utils.Constant;
+
+public class WebSocketSendMessageUtil {
+
+    /**
+     * 鍙戦�佸悗鍙颁换鍔$殑socket娑堟伅
+     * @param bgTaskStatus 娑堟伅鐨勫唴瀹�
+     */
+    public static void sendBgTaskMessage(BgTaskStatus bgTaskStatus) {
+        WebSocketMessage webSocketMessage = new WebSocketMessage(Constant.SocketMessageType.BG_TASK.getValue(),
+                bgTaskStatus);
+        String message = WebSocketMessageDecoder.encodeMessage(webSocketMessage);
+        WebSocketSenderHandler.getInstance().broadcast(message);
+    }
+}
diff --git a/src/main/kotlin/cn/flightfeather/supervision/socket/config/SPTextWebSocketHandler.kt b/src/main/kotlin/cn/flightfeather/supervision/socket/config/SPTextWebSocketHandler.kt
index 8c3df27..e66e71e 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/socket/config/SPTextWebSocketHandler.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/socket/config/SPTextWebSocketHandler.kt
@@ -1,7 +1,7 @@
 package cn.flightfeather.supervision.socket.config
 
 import cn.flightfeather.supervision.common.utils.Constant
-import cn.flightfeather.supervision.socket.WebSocketMessageUtil
+import cn.flightfeather.supervision.socket.WebSocketMessageDecoder
 import cn.flightfeather.supervision.socket.WsSessionManager
 import cn.flightfeather.supervision.socket.processor.WebSocketReceiver
 import org.springframework.stereotype.Component
@@ -47,7 +47,7 @@
         val payload = message.payload
         val sessionId = session.attributes["session_id"]
         println("server 鎺ユ敹鍒� $sessionId 鍙戦�佺殑 $payload")
-        if (WebSocketMessageUtil.decodeMessage(payload).type ==
+        if (WebSocketMessageDecoder.decodeMessage(payload).type ==
             Constant.SocketHeartMessageType.HEART_MESSAGE_TYPE.value) {
             webSocketReceiver.onReceiveHeartMsg(payload, sessionId.toString())
         }
diff --git a/src/main/kotlin/cn/flightfeather/supervision/socket/processor/WebSocketReceiver.kt b/src/main/kotlin/cn/flightfeather/supervision/socket/processor/WebSocketReceiver.kt
index 11b1c62..dcce685 100644
--- a/src/main/kotlin/cn/flightfeather/supervision/socket/processor/WebSocketReceiver.kt
+++ b/src/main/kotlin/cn/flightfeather/supervision/socket/processor/WebSocketReceiver.kt
@@ -4,7 +4,7 @@
 import cn.flightfeather.supervision.common.log.WorkStreamLogInfo
 import cn.flightfeather.supervision.common.utils.Constant
 import cn.flightfeather.supervision.socket.WebSocketMessage
-import cn.flightfeather.supervision.socket.WebSocketMessageUtil
+import cn.flightfeather.supervision.socket.WebSocketMessageDecoder
 import org.springframework.stereotype.Component
 import java.time.LocalDateTime
 
@@ -30,7 +30,7 @@
      * 鎺ユ敹蹇冭烦娑堟伅澶勭悊
      */
     fun onReceiveHeartMsg(msg: String, sessionId: String) {
-        val content = WebSocketMessageUtil.encodeMessage(WebSocketMessage(Constant.SocketHeartMessageType.HEART_MESSAGE_TYPE.value,
+        val content = WebSocketMessageDecoder.encodeMessage(WebSocketMessage(Constant.SocketHeartMessageType.HEART_MESSAGE_TYPE.value,
             LocalDateTime.now()))
         webSocketSender.sendMsg(content, sessionId)
     }

--
Gitblit v1.9.3