From d267efe74181bbc89e7ecda1032f11965984769b Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Wed, 19 Mar 2025 14:08:07 +0800
Subject: [PATCH] 增加状态统一订阅 增加载荷和飞控用户同时获取
---
ard-work/src/main/java/com/ard/tianyu/websocket/handler/TyMessageHandler.java | 72 ++++++++++++++++++++++++++++++++++--
1 files changed, 68 insertions(+), 4 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 663323b..082386f 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
@@ -29,7 +29,10 @@
private UavTelemetryManager uavTelemetryManager;
@Resource
private UavSignalManager uavSignalManager;
-
+ @Resource
+ private UavControlManager uavControlManager;
+ @Resource
+ private UavAllManager uavAllManager;
@Override
public void handleTextMessage(WebSocketSession session, TextMessage message) {
String userIdStr = (String) session.getAttributes().get("userId");
@@ -51,6 +54,12 @@
break;
case "signal":
handleSignalMessage(payload, userId);
+ break;
+ case "controller":
+ handleControlMessage(payload, userId);
+ break;
+ case "all":
+ handleAllMessage(payload, userId);
break;
}
}
@@ -106,7 +115,7 @@
Boolean subscribe = uavStateMessage.getSubscribe();
if (subscribe) {
// 执行订阅操作
- uavStateManager.subscribe(boxSn, userId);
+ uavStateManager.subscribe(boxSn, userId, 2);
} else {
// 执行退订操作
uavStateManager.unsubscribe(boxSn, userId);
@@ -137,7 +146,7 @@
Boolean subscribe = uavTelemetryMessage.getSubscribe();
if (subscribe) {
// 执行订阅操作
- uavTelemetryManager.subscribe(boxSn, userId);
+ uavTelemetryManager.subscribe(boxSn, userId, 2);
} else {
// 执行退订操作
uavTelemetryManager.unsubscribe(boxSn, userId);
@@ -168,10 +177,64 @@
Boolean subscribe = uavSignalMessage.getSubscribe();
if (subscribe) {
// 执行订阅操作
- uavSignalManager.subscribe(boxSn, userId);
+ uavSignalManager.subscribe(boxSn, userId, 2);
} else {
// 执行退订操作
uavSignalManager.unsubscribe(boxSn, userId);
+ }
+ }
+ }
+
+ /**
+ * 处理无人机控制
+ * 根据接收到的消息内容,决定无人机控制信息的订阅或退订
+ *
+ * @param payload 消息负载,包含控制信息
+ * @param userId 用户ID,用于标识用户
+ */
+ private void handleControlMessage(String payload, Long userId) {
+ // 解析接收到的JSON消息,将其转换为BaseMessage对象
+ BaseMessage<UavControlMessage> controlMessage = JSON.parseObject(payload,
+ new TypeReference<BaseMessage<UavControlMessage>>() {
+ });
+ // 获取消息的有效载荷部分
+ UavControlMessage uavControlMessage = controlMessage.getPayload();
+
+ // 检查有效载荷是否存在
+ if (uavControlMessage != null) {
+ // 获取无人机盒子的序列号
+ String boxSn = uavControlMessage.getBoxSn();
+ // 根据消息中的订阅标志,决定是订阅还是退订无人机状态
+ Boolean subscribe = uavControlMessage.getSubscribe();
+ if (subscribe) {
+ // 执行订阅操作
+ uavControlManager.subscribe(boxSn, userId, 2);
+ } else {
+ // 执行退订操作
+ uavControlManager.unsubscribe(boxSn, userId);
+ }
+ }
+ }
+ private void handleAllMessage(String payload, Long userId) {
+ // 解析接收到的JSON消息,将其转换为BaseMessage对象
+ BaseMessage<UavControlMessage> controlMessage = JSON.parseObject(payload,
+ new TypeReference<BaseMessage<UavControlMessage>>() {
+ });
+ // 获取消息的有效载荷部分
+ UavControlMessage uavControlMessage = controlMessage.getPayload();
+
+ // 检查有效载荷是否存在
+ if (uavControlMessage != null) {
+ // 获取无人机盒子的序列号
+ String boxSn = uavControlMessage.getBoxSn();
+ // 根据消息中的订阅标志,决定是订阅还是退订无人机状态
+ Boolean subscribe = uavControlMessage.getSubscribe();
+ if (subscribe) {
+ // 执行订阅操作
+ uavAllManager.subscribe(boxSn, userId, 2);
+ } else {
+ // 执行退订操作
+ uavAllManager.unsubscribe(boxSn, userId);
}
}
}
@@ -201,5 +264,6 @@
uavStateManager.removeSubscribe(userId);
uavTelemetryManager.removeSubscribe(userId);
uavSignalManager.removeSubscribe(userId);
+ uavControlManager.removeSubscribe(userId);
}
}
--
Gitblit v1.9.3