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
ÎļþÒÑɾ³ý src/main/java/com/ard/utils/netty/tcp/BootNettyChannelInitializer.java
ÎļþÒÑɾ³ý src/main/java/com/ard/utils/netty/tcp/BootNettyClient.java
ÎļþÒÑɾ³ý src/main/java/com/ard/utils/netty/tcp/BootNettyClientChannel.java
ÎļþÒÑɾ³ý src/main/java/com/ard/utils/netty/tcp/BootNettyClientChannelCache.java
ÎļþÒÑɾ³ý src/main/java/com/ard/utils/netty/tcp/BootNettyClientThread.java
ÎļþÒÑɾ³ý 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
ÎļþÒÑɾ³ý 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
ÎļþÒÑɾ³ý src/main/java/com/ard/utils/netty/tcp/DynamicClientHandler.java
ÎļþÒÑɾ³ý src/main/java/com/ard/utils/netty/tcp/DynamicClientInitializer.java
ÎļþÒÑɾ³ý src/main/java/com/ard/utils/netty/tcp/MessageHandler.java
ÎļþÃû´Ó 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<>();