From 16fd4235f692777cfd9cceff5090e5450e2173b3 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Tue, 04 Mar 2025 13:59:05 +0800
Subject: [PATCH] 优化包结构、增加载荷飞控权限

---
 ard-work/src/main/java/com/ard/tianyu/websocket/handler/TyMessageHandler.java |   60 +++++++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 51 insertions(+), 9 deletions(-)

diff --git a/ard-work/src/main/java/com/ard/tianyu/websocket/handler/TyMessageHandler.java b/ard-work/src/main/java/com/ard/tianyu/websocket/handler/TyMessageHandler.java
index bb42f1f..b74d892 100644
--- a/ard-work/src/main/java/com/ard/tianyu/websocket/handler/TyMessageHandler.java
+++ b/ard-work/src/main/java/com/ard/tianyu/websocket/handler/TyMessageHandler.java
@@ -1,5 +1,11 @@
 package com.ard.tianyu.websocket.handler;
 
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.TypeReference;
+import com.ard.tianyu.service.control.UavControlService;
+import com.ard.tianyu.service.stream.UavStreamManager;
+import com.ard.tianyu.websocket.domain.BaseMessage;
+import com.ard.tianyu.websocket.domain.UavStreamMessage;
 import com.ard.tianyu.websocket.utils.WebSocketUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
@@ -8,32 +14,68 @@
 import org.springframework.web.socket.WebSocketSession;
 import org.springframework.web.socket.handler.TextWebSocketHandler;
 
+import javax.annotation.Resource;
+
+
 @Component
 @Slf4j
 public class TyMessageHandler extends TextWebSocketHandler {
 
+    @Resource
+    private UavStreamManager uavStreamManager;
+    @Resource
+    private UavControlService uavControlService;
+
     @Override
-    public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
+    public void handleTextMessage(WebSocketSession session, TextMessage message) {
         // 处理接收到的消息
+        String userIdStr  = (String) session.getAttributes().get("userId");
+        Long userId = Long.parseLong(userIdStr);
         String payload = message.getPayload();
-        log.info("【cmd】Received message: " + payload);
-        log.info("【cmd】size: " + WebSocketUtil.ONLINE_USER_SESSIONS.size());
+        log.info("【cmd】Received message: {}", payload);
+        log.info("【cmd】size: {}", WebSocketUtil.ONLINE_USER_SESSIONS.size());
+        BaseMessage<?> baseMessage = JSON.parseObject(payload, BaseMessage.class);
+        switch (baseMessage.getType()) {
+            case "stream":
+                BaseMessage<UavStreamMessage> streamMessage = JSON.parseObject(payload,
+                        new TypeReference<BaseMessage<UavStreamMessage>>() {
+                        });
+                UavStreamMessage uavStreamMessage = streamMessage.getPayload();
+                if (uavStreamMessage != null) {
+                    String boxSn = uavStreamMessage.getBoxSn();
+                    if (uavStreamMessage.getPullType().equals(1)) {
+                        uavStreamManager.startPullStream(boxSn, userId);
+                    } else {
+                        uavStreamManager.stopPullStream(boxSn, userId);
+                    }
+                }
+                break;
+        }
+
     }
 
     @Override
     public void afterConnectionEstablished(WebSocketSession session) {
-        log.info("【cmd】Connected: " + session.getId());
-        String userId = (String) session.getAttributes().get("userId");
+        log.info("【cmd】Connected: {}", session.getId());
+        String userIdStr  = (String) session.getAttributes().get("userId");
+        Long userId = Long.parseLong(userIdStr);
         WebSocketUtil.ONLINE_USER_SESSIONS.put(userId, session);
-        log.info("【cmd】size: " + WebSocketUtil.ONLINE_USER_SESSIONS.size());
+        log.info("【cmd】size: {}", WebSocketUtil.ONLINE_USER_SESSIONS.size());
 
     }
 
     @Override
     public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
-        log.info("【cmd】Disconnected: " + session.getId());
-        String userId = (String) session.getAttributes().get("userId");
+        log.info("【cmd】Disconnected: {}", session.getId());
+        String userIdStr  = (String) session.getAttributes().get("userId");
+        Long userId = Long.parseLong(userIdStr);
         WebSocketUtil.ONLINE_USER_SESSIONS.remove(userId);
-        log.info("【cmd】size: " + WebSocketUtil.ONLINE_USER_SESSIONS.size());
+        log.info("【cmd】size: {}", WebSocketUtil.ONLINE_USER_SESSIONS.size());
+        //停止用户的所有流
+        uavStreamManager.stopAllPullStreamByUser(userId);
+        if (userId != null) {
+            // 释放该用户所有 UAV 控制权
+            uavControlService.releaseAllControls(userId);
+        }
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3