src/main/java/com/ard/alarm/radar/controller/RadarController.java
@@ -41,9 +41,8 @@ if (ardEquipRadar == null) { return AjaxResult.error("雷达不存在"); } Channel channel = (Channel)ClientInitialize.SuccessConnectMap.get(ardEquipRadar.getId()); if (channel==null) { Channel channel = ClientInitialize.SucChannelMap.get(ardEquipRadar.getIp() + ":" + ardEquipRadar.getPort()); if (channel == null) { return AjaxResult.error("雷达未连接"); } Double longitude = ardEquipRadar.getLongitude();//雷达经度 src/main/java/com/ard/utils/netty/tcp/BootNettyChannelInboundHandlerAdapter.java
File was deleted src/main/java/com/ard/utils/netty/tcp/BootNettyChannelInitializer.java
File was deleted src/main/java/com/ard/utils/netty/tcp/BootNettyClient.java
File was deleted src/main/java/com/ard/utils/netty/tcp/BootNettyClientChannel.java
File was deleted src/main/java/com/ard/utils/netty/tcp/BootNettyClientChannelCache.java
File was deleted src/main/java/com/ard/utils/netty/tcp/BootNettyClientThread.java
File was deleted src/main/java/com/ard/utils/netty/tcp/ClientHandler.java
@@ -8,7 +8,6 @@ import com.ard.utils.util.GisUtils; import com.ard.utils.mqtt.MqttProducer; import io.netty.buffer.ByteBuf; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelId; import io.netty.channel.SimpleChannelInboundHandler; @@ -17,7 +16,6 @@ import javax.xml.bind.DatatypeConverter; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.ScheduledFuture; @@ -58,19 +56,19 @@ */ @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { ChannelId id = ctx.channel().id(); InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress(); int port = ipSocket.getPort(); String host = ipSocket.getHostString(); log.error("与设备" + host + ":" + port + "连接断开!"); ArdEquipRadar ardEquipRadar = ClientInitialize.tureConnectMap.get(host+ ":" + port); String ipPort = ipSocket.getHostString() + ":" + ipSocket.getPort(); log.error("与设备" + ipPort + "连接断开!"); // 连接断开后的最后处理 ctx.pipeline().remove(this); ctx.deregister(); ctx.close(); // 将失败信息插入Set集合 ClientInitialize.falseConnectSet.add(ardEquipRadar); ArdEquipRadar radar = ClientInitialize.trueConnectMap.get(ipPort); if (radar != null) { ClientInitialize.falseConnectSet.add(radar); ClientInitialize.trueConnectMap.remove(ipPort); } super.channelInactive(ctx); } @@ -83,20 +81,26 @@ * @throws Exception */ @Override public void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception { public void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) { InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress(); int port = ipSocket.getPort(); String host = ipSocket.getHostString(); ArdEquipRadar ardEquipRadar = ClientInitialize.tureConnectMap.get(host+":"+port); MessageParsing messageParsing = ClientInitialize.MessageMap.get(host + ":" + port); String ipPort = ipSocket.getHostString() + ":" + ipSocket.getPort(); ArdEquipRadar radar = ClientInitialize.trueConnectMap.get(ipPort); if (radar == null) { return; } MessageHandler messageHandler = ClientInitialize.SucMessageHandlerMap.get(ipPort); if (messageHandler == null) { return; } // 处理接收到的消息 byte[] byteArray = new byte[msg.readableBytes()]; msg.getBytes(msg.readerIndex(), byteArray); byte[] bytes = messageParsing.receiveCompletePacket(byteArray); byte[] bytes = messageHandler.receiveCompletePacket(byteArray); if (bytes != null) { processData(ardEquipRadar, bytes); processData(radar, bytes); } } /** * 通道数据处理完成 @@ -170,15 +174,15 @@ /** * 解析报警数据 */ public void processData(ArdEquipRadar ardEquipRadarbyte, byte[] data) { public void processData(ArdEquipRadar radar, byte[] data) { try { String radarId = ardEquipRadarbyte.getId(); String radarName = ardEquipRadarbyte.getName(); Double radarLongitude = ardEquipRadarbyte.getLongitude(); Double radarLagitude = ardEquipRadarbyte.getLatitude(); Double radarAltitude = ardEquipRadarbyte.getAltitude(); String radarId = radar.getId(); String radarName = radar.getName(); Double radarLongitude = radar.getLongitude(); Double radarLagitude = radar.getLatitude(); Double radarAltitude = radar.getAltitude(); //region crc校验-目前仅用于显示校验结果 Boolean crc32Check = MessageParsing.CRC32Check(data); Boolean crc32Check = MessageHandler.CRC32Check(data); if (!crc32Check) { log.debug("CRC32校验不通过"); } else { @@ -187,7 +191,7 @@ //endregion //log.info("原始数据:" + DatatypeConverter.printHexBinary(data)); //log.info("雷达信息:" + host + "【port】" + port + "【X】" + longitude + "【Y】" + lagitude + "【Z】" + altitude); data = MessageParsing.transferData(data);//去掉包头和包尾、校验及转义 data = MessageHandler.transferData(data);//去掉包头和包尾、校验及转义 //region 负载头解析 byte[] type = Arrays.copyOfRange(data, 0, 1);//命令类型 // log.info("命令类型:" + DatatypeConverter.printHexBinary(type)); @@ -315,8 +319,7 @@ double thetaRadians = Math.toRadians(fTy + 90); // 使用正弦函数计算对边长度 Distance = Math.sin(thetaRadians) * Distance; if(Distance<0) { if (Distance < 0) { continue;//过滤距离小于0的脏数据 } //log.debug("目标投影距离(m):" + Distance); src/main/java/com/ard/utils/netty/tcp/ClientHelper.java
File was deleted src/main/java/com/ard/utils/netty/tcp/ClientInitialize.java
@@ -1,13 +1,5 @@ package com.ard.utils.netty.tcp; /** * @Description: * @ClassName: init * @Author: 刘苏义 * @Date: 2023年07月05日13:11 * @Version: 1.0 **/ import com.ard.alarm.radar.domain.ArdEquipRadar; import com.ard.alarm.radar.service.IArdEquipRadarService; import com.ard.utils.netty.config.NettyTcpConfiguration; @@ -44,10 +36,11 @@ IArdEquipRadarService ardEquipRadarService; private Bootstrap bootstrap; public static CopyOnWriteArraySet<ArdEquipRadar> falseConnectSet = new CopyOnWriteArraySet(); public static ConcurrentHashMap<String, ArdEquipRadar> tureConnectMap = new ConcurrentHashMap(); public static ConcurrentHashMap<String, Object> SuccessConnectMap = new ConcurrentHashMap(); public static ConcurrentHashMap<String, MessageParsing> MessageMap = new ConcurrentHashMap(); public static CopyOnWriteArraySet<ArdEquipRadar> falseConnectSet = new CopyOnWriteArraySet();//失败连接的雷达Set public static ConcurrentHashMap<String, ArdEquipRadar> trueConnectMap = new ConcurrentHashMap();//成功连接的ip端口对应的雷达 public static ConcurrentHashMap<String, MessageHandler> SucMessageHandlerMap = new ConcurrentHashMap();//成功连接的ip端口对应的报文解析器 public static ConcurrentHashMap<String, Channel> SucChannelMap = new ConcurrentHashMap();//成功连接的ip端口对应的netty通道 /** * Netty初始化配置 */ @@ -75,8 +68,8 @@ // 循环集合内元素 falseConnectSet.forEach(new Consumer<ArdEquipRadar>() { @Override public void accept(ArdEquipRadar ardEquipRadar) { connectServer(ardEquipRadar); public void accept(ArdEquipRadar radar) { connectServer(radar); } }); } @@ -99,24 +92,23 @@ // 获取地址及端口 String host = ardEquipRadar.getIp(); Integer port = ardEquipRadar.getPort(); String ipPort = host + ":" + port; // 异步连接tcp服务端 bootstrap.remoteAddress(host, port).connect().addListener((ChannelFuture futureListener) -> { if (!futureListener.isSuccess()) { log.debug("雷达【" + host + ":" + port + "】连接失败"); futureListener.channel().close(); // 连接失败信息插入Set falseConnectSet.add(ardEquipRadar); // 连接失败信息从map移除 tureConnectMap.remove( host + ":" + port); SuccessConnectMap.remove(ardEquipRadar.getId()); } else { log.debug("雷达【" + host + ":" + port + "】连接成功"); if (futureListener.isSuccess()) { log.debug("雷达【" + ipPort + "】连接成功"); // 连接成功信息从Set拔除 falseConnectSet.remove(ardEquipRadar); // 连接成功信息写入map tureConnectMap.put(host+":"+port, ardEquipRadar); MessageMap.put(host+":"+port,new MessageParsing()); SuccessConnectMap.put(ardEquipRadar.getId(),futureListener.channel()); trueConnectMap.put(ipPort, ardEquipRadar); SucMessageHandlerMap.put(ipPort, new MessageHandler()); SucChannelMap.put(ipPort, futureListener.channel()); } else { log.debug("雷达【" + ipPort + "】连接失败"); futureListener.channel().close(); // 连接失败信息插入Set falseConnectSet.add(ardEquipRadar); } }); } src/main/java/com/ard/utils/netty/tcp/DynamicClient.java
File was deleted src/main/java/com/ard/utils/netty/tcp/DynamicClientHandler.java
File was deleted src/main/java/com/ard/utils/netty/tcp/DynamicClientInitializer.java
File was deleted src/main/java/com/ard/utils/netty/tcp/MessageHandler.java
File was renamed from src/main/java/com/ard/utils/netty/tcp/MessageParsing.java @@ -14,7 +14,7 @@ * @Date: 2023年07月03日15:30 * @Version: 1.0 **/ public class MessageParsing { public class MessageHandler { // 创建缓冲区列表 private List<Byte> buffer = new ArrayList<>();