From fe63fd580c5b65fa398dfe1fdf44466b26c6aadd Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Sat, 22 Mar 2025 13:38:30 +0800
Subject: [PATCH] 优化
---
ard-work/src/main/java/com/ard/tianyu/component/netty/TcpClientSession.java | 4
ard-work/src/main/java/com/ard/tianyu/component/websocket/handler/TyMessageHandler.java | 61 +++++++++++--------
ard-work/src/main/java/com/ard/tianyu/domain/enums/MessageType.java | 29 +++++++++
ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java | 4
ard-work/src/main/java/com/ard/tianyu/component/netty/handler/ClientHandler.java | 6 +-
ard-admin/src/main/resources/application-dev.yml | 1
ard-work/src/main/java/com/ard/tianyu/component/netty/NettyTcpClient.java | 17 +++--
7 files changed, 81 insertions(+), 41 deletions(-)
diff --git a/ard-admin/src/main/resources/application-dev.yml b/ard-admin/src/main/resources/application-dev.yml
index da01e00..4bff9d9 100644
--- a/ard-admin/src/main/resources/application-dev.yml
+++ b/ard-admin/src/main/resources/application-dev.yml
@@ -43,6 +43,7 @@
# 天宇tcp服务器地址
tcpserver: 59.110.237.99
tcpport: 8125
+
#流媒体配置
mediamtx:
# 流媒体服务器地址
diff --git a/ard-work/src/main/java/com/ard/tianyu/component/netty/TyNettyTcpClient.java b/ard-work/src/main/java/com/ard/tianyu/component/netty/NettyTcpClient.java
similarity index 84%
rename from ard-work/src/main/java/com/ard/tianyu/component/netty/TyNettyTcpClient.java
rename to ard-work/src/main/java/com/ard/tianyu/component/netty/NettyTcpClient.java
index cf88289..326c5b5 100644
--- a/ard-work/src/main/java/com/ard/tianyu/component/netty/TyNettyTcpClient.java
+++ b/ard-work/src/main/java/com/ard/tianyu/component/netty/NettyTcpClient.java
@@ -21,9 +21,9 @@
@Component
@Slf4j
-public class TyNettyTcpClient {
+public class NettyTcpClient {
- public static Map<String, TyBoxSession> channels = new HashMap<>();
+ public static Map<String, TcpClientSession> channels = new HashMap<>();
EventLoopGroup eventLoopGroup = new NioEventLoopGroup();
@@ -59,11 +59,11 @@
*/
public void initConnection(String host, Integer port) {
- log.info("初始化连接天宇tcp服务器【{}:{}】", host, port);
- String currentBoxSn = "";
+ log.info("初始化连接TCP服务器【{}:{}】", host, port);
+ String clientId = "clientId_1";
//判断是否已经存在连接,如果存在则关闭之前的连接
if (channels.containsKey(host + ":" + port)) {
- currentBoxSn = channels.get(host + ":" + port).getSubBoxSn();
+ clientId = channels.get(host + ":" + port).getClientId();
channels.get(host + ":" + port).getChannelFuture().channel().close();
}
@@ -71,12 +71,12 @@
Bootstrap bootstrap = getBootstrap();
ChannelFuture future = bootstrap.connect(host, port).addListener((ChannelFuture futureListener) -> {
if (futureListener.isSuccess()) {
- log.info("连接天宇TCP服务器成功【{}:{}】", host, port);
+ log.info("连接TCP服务器成功【{}:{}】", host, port);
TyTcpServerCache.putTcpServerCache(host + ":" + port, true);
} else {
final EventLoop eventLoop = futureListener.channel().eventLoop();
eventLoop.schedule(() -> {
- log.info("连接天宇TCP服务器失败【{}:{}】,正尝试重连...", host, port);
+ log.info("连接TCP服务器失败【{}:{}】,正尝试重连...", host, port);
TyTcpServerCache.putTcpServerCache(host + ":" + port, false);
try {
initConnection(host, port);
@@ -87,7 +87,8 @@
}
});
//将连接存入集合
- channels.put(host + ":" + port, TyBoxSession.builder().subBoxSn(currentBoxSn).channelFuture(future).isReConnect(!currentBoxSn.equals("")).build());
+ channels.put(host + ":" + port,
+ TcpClientSession.builder().ClientId(clientId).channelFuture(future).isReConnect(!clientId.isEmpty()).build());
}
//创建天宇连接
diff --git a/ard-work/src/main/java/com/ard/tianyu/component/netty/TyBoxSession.java b/ard-work/src/main/java/com/ard/tianyu/component/netty/TcpClientSession.java
similarity index 84%
rename from ard-work/src/main/java/com/ard/tianyu/component/netty/TyBoxSession.java
rename to ard-work/src/main/java/com/ard/tianyu/component/netty/TcpClientSession.java
index 907a3bd..0aff5a7 100644
--- a/ard-work/src/main/java/com/ard/tianyu/component/netty/TyBoxSession.java
+++ b/ard-work/src/main/java/com/ard/tianyu/component/netty/TcpClientSession.java
@@ -10,9 +10,9 @@
@Builder
@AllArgsConstructor
@NoArgsConstructor
-public class TyBoxSession {
+public class TcpClientSession {
- public String subBoxSn;
+ public String ClientId;
public ChannelFuture channelFuture;
diff --git a/ard-work/src/main/java/com/ard/tianyu/component/netty/handler/ClientHandler.java b/ard-work/src/main/java/com/ard/tianyu/component/netty/handler/ClientHandler.java
index a284d48..4ea5b91 100644
--- a/ard-work/src/main/java/com/ard/tianyu/component/netty/handler/ClientHandler.java
+++ b/ard-work/src/main/java/com/ard/tianyu/component/netty/handler/ClientHandler.java
@@ -1,7 +1,7 @@
package com.ard.tianyu.component.netty.handler;
import com.ard.tianyu.domain.cache.TyTcpServerCache;
-import com.ard.tianyu.component.netty.TyNettyTcpClient;
+import com.ard.tianyu.component.netty.NettyTcpClient;
import com.ard.tianyu.component.netty.command.BaseCmd;
import com.ard.tianyu.service.ITyService;
import io.netty.channel.ChannelHandler;
@@ -25,7 +25,7 @@
private ITyService tyService;
@Resource
- private TyNettyTcpClient tyNettyTcpClient;
+ private NettyTcpClient nettyTcpClient;
@Override
public void channelRead0(ChannelHandlerContext ctx, BaseCmd command) {
@@ -75,7 +75,7 @@
ctx.channel().eventLoop().schedule(() -> {
log.error("天宇服务端链接不上,开始重连操作...");
try {
- tyNettyTcpClient.initConnection(host, port);
+ nettyTcpClient.initConnection(host, port);
} catch (Exception e) {
log.error("天宇服务端连接异常: {}", e.getMessage());
}
diff --git a/ard-work/src/main/java/com/ard/tianyu/component/websocket/handler/TyMessageHandler.java b/ard-work/src/main/java/com/ard/tianyu/component/websocket/handler/TyMessageHandler.java
index f5094b0..bfb4cfa 100644
--- a/ard-work/src/main/java/com/ard/tianyu/component/websocket/handler/TyMessageHandler.java
+++ b/ard-work/src/main/java/com/ard/tianyu/component/websocket/handler/TyMessageHandler.java
@@ -3,6 +3,7 @@
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.TypeReference;
import com.ard.tianyu.component.websocket.WebSocketSessionManager;
+import com.ard.tianyu.domain.enums.MessageType;
import com.ard.tianyu.domain.message.*;
import com.ard.tianyu.service.control.UavControlService;
import com.ard.tianyu.component.websocket.utils.WebSocketUtil;
@@ -12,6 +13,7 @@
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;
+
import javax.annotation.Resource;
@@ -33,34 +35,39 @@
private UavControlManager uavControlManager;
@Resource
private UavAllManager uavAllManager;
+
@Override
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: {}", WebSocketSessionManager.getOnlineUserCount());
-
- BaseMessage<?> baseMessage = JSON.parseObject(payload, BaseMessage.class);
- switch (baseMessage.getType()) {
- case "stream":
- handleStreamMessage(payload, userId);
- break;
- case "state":
- handleStateMessage(payload, userId);
- break;
- case "telemetry":
- handleTelemetryMessage(payload, userId);
- break;
- case "signal":
- handleSignalMessage(payload, userId);
- break;
- case "controller":
- handleControlMessage(payload, userId);
- break;
- case "all":
- handleAllMessage(payload, userId);
- break;
+ try {
+ 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: {}", WebSocketSessionManager.getOnlineUserCount());
+ BaseMessage<?> baseMessage = JSON.parseObject(payload, BaseMessage.class);
+ MessageType messageType = MessageType.fromString(baseMessage.getType());
+ switch (messageType) {
+ case STREAM:
+ handleStreamMessage(payload, userId);
+ break;
+ case STATE:
+ handleStateMessage(payload, userId);
+ break;
+ case TELEMETRY:
+ handleTelemetryMessage(payload, userId);
+ break;
+ case SIGNAL:
+ handleSignalMessage(payload, userId);
+ break;
+ case CONTROLLER:
+ handleControlMessage(payload, userId);
+ break;
+ case ALL:
+ handleAllMessage(payload, userId);
+ break;
+ }
+ } catch (Exception e) {
+ log.error("Error handling message: {}", message, e);
}
}
@@ -215,6 +222,7 @@
}
}
}
+
private void handleAllMessage(String payload, Long userId) {
// 解析接收到的JSON消息,将其转换为BaseMessage对象
BaseMessage<UavControlMessage> controlMessage = JSON.parseObject(payload,
@@ -238,6 +246,7 @@
}
}
}
+
@Override
public void afterConnectionEstablished(WebSocketSession session) {
log.info("【cmd】Connected: {}", session.getId());
diff --git a/ard-work/src/main/java/com/ard/tianyu/domain/enums/MessageType.java b/ard-work/src/main/java/com/ard/tianyu/domain/enums/MessageType.java
new file mode 100644
index 0000000..de16d3b
--- /dev/null
+++ b/ard-work/src/main/java/com/ard/tianyu/domain/enums/MessageType.java
@@ -0,0 +1,29 @@
+package com.ard.tianyu.domain.enums;
+
+public enum MessageType {
+ STREAM("stream"),
+ STATE("state"),
+ TELEMETRY("telemetry"),
+ SIGNAL("signal"),
+ CONTROLLER("controller"),
+ ALL("all");
+
+ private final String type;
+
+ MessageType(String type) {
+ this.type = type;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public static MessageType fromString(String type) {
+ for (MessageType messageType : MessageType.values()) {
+ if (messageType.type.equalsIgnoreCase(type)) {
+ return messageType;
+ }
+ }
+ throw new IllegalArgumentException("Unknown message type: " + type);
+ }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java b/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
index 60be244..cef7380 100644
--- a/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
+++ b/ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
@@ -34,7 +34,7 @@
import com.ard.tianyu.domain.dto.signal.SignalInfo;
import com.ard.tianyu.domain.dto.state.UavState;
import com.ard.tianyu.domain.dto.telemetry.TelemetryData;
-import com.ard.tianyu.component.netty.TyNettyTcpClient;
+import com.ard.tianyu.component.netty.NettyTcpClient;
import com.ard.tianyu.component.netty.command.control.AbsAngleControlCmd;
import com.ard.tianyu.component.netty.command.control.AngleControlCmd;
import com.ard.tianyu.component.netty.command.control.SpeedControlCmd;
@@ -827,7 +827,7 @@
*/
private void sendMessage(String key, BaseCmd msg) {
try {
- ChannelFuture future = TyNettyTcpClient.channels.get(key).getChannelFuture();
+ ChannelFuture future = NettyTcpClient.channels.get(key).getChannelFuture();
Channel channel = future.channel();
if (channel.isActive()) {
InetSocketAddress ipSocket = (InetSocketAddress) channel.remoteAddress();
--
Gitblit v1.9.3