From 8c5435101924d68588448a4c981417df4b4dab1d Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Fri, 21 Feb 2025 11:08:20 +0800
Subject: [PATCH] 整合websocket 统一使用按类型区分
---
ard-work/src/main/java/com/ard/tianyu/websocket/handler/TyMessageHandler.java | 49 ++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 42 insertions(+), 7 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 58b5969..d7be5e8 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.impl.UavControlManager;
+import com.ard.tianyu.service.impl.UavStreamManager;
+import com.ard.tianyu.websocket.domain.BaseMessage;
+import com.ard.tianyu.websocket.domain.PullStreamDTO;
import com.ard.tianyu.websocket.utils.WebSocketUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -7,33 +13,62 @@
import org.springframework.web.socket.TextMessage;
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 UavControlManager uavControlManager;
+ @Resource
+ private UavStreamManager uavStreamManager;
@Override
- public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
+ public void handleTextMessage(WebSocketSession session, TextMessage message) {
// 处理接收到的消息
+ String userId = (String) session.getAttributes().get("userId");
String payload = message.getPayload();
- log.info("【websocket】Received message: " + payload);
- log.info("【websocket】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<PullStreamDTO> streamMessage = JSON.parseObject(payload,
+ new TypeReference<BaseMessage<PullStreamDTO>>() {
+ });
+ PullStreamDTO pullStreamDTO = streamMessage.getPayload();
+ if (pullStreamDTO != null) {
+ String boxSn = pullStreamDTO.getBoxSn();
+ if (pullStreamDTO.getPullType().equals(1)) {
+ uavStreamManager.startPullStream(boxSn, userId);
+ } else {
+ uavStreamManager.stopPullStream(boxSn, userId);
+ }
+ }
+ break;
+ }
+
}
@Override
public void afterConnectionEstablished(WebSocketSession session) {
- log.info("【websocket】Connected: " + session.getId());
+ log.info("【cmd】Connected: {}", session.getId());
String userId = (String) session.getAttributes().get("userId");
WebSocketUtil.ONLINE_USER_SESSIONS.put(userId, session);
- log.info("【websocket】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("【websocket】Disconnected: " + session.getId());
+ log.info("【cmd】Disconnected: {}", session.getId());
String userId = (String) session.getAttributes().get("userId");
WebSocketUtil.ONLINE_USER_SESSIONS.remove(userId);
- log.info("【websocket】size: " + WebSocketUtil.ONLINE_USER_SESSIONS.size());
+ log.info("【cmd】size: {}", WebSocketUtil.ONLINE_USER_SESSIONS.size());
+ //停止用户的所有流
+ uavStreamManager.stopAllPullStreamByUser(userId);
+ //移除控制的无人机
+ uavControlManager.releaseAllControlByUser(userId);
}
}
\ No newline at end of file
--
Gitblit v1.9.3