From 8f224dbf1a1bd1a65dead7ceda8dd0a3fa567115 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期四, 28 十二月 2023 15:57:09 +0800 Subject: [PATCH] 优化雷达tcp客户端 --- src/main/java/com/ard/utils/netty/tcp/ClientHandler.java | 67 +++++++++++++++++---------------- 1 files changed, 35 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/ard/utils/netty/tcp/ClientHandler.java b/src/main/java/com/ard/utils/netty/tcp/ClientHandler.java index c59dd32..6e12a61 100644 --- a/src/main/java/com/ard/utils/netty/tcp/ClientHandler.java +++ b/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(); - // 灏嗗け璐ヤ俊鎭彃鍏et闆嗗悎 - 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); } } + /** * 閫氶亾鏁版嵁澶勭悊瀹屾垚 @@ -148,7 +152,7 @@ byte[] payloadCrc32 = ByteUtils.parseCrc32(payload); byte[] footer = {0x01, 0x02, 0x00}; byte[] heart = ByteUtils.appendArrays(header, payload, payloadCrc32, footer); -// byte[] heart = {0x01, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00, (byte) 0x83, (byte) 0x88, 0x5d, 0x71, 0x01, 0x02, 0x00}; + //byte[] heart = {0x01, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00, (byte) 0x83, (byte) 0x88, 0x5d, 0x71, 0x01, 0x02, 0x00}; String hexString = DatatypeConverter.printHexBinary(heart); // log.debug("鍙戦�佸績璺�:" + hexString); message.writeBytes(heart); @@ -170,15 +174,15 @@ /** * 瑙f瀽鎶ヨ鏁版嵁 */ - 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,12 +191,12 @@ //endregion //log.info("鍘熷鏁版嵁:" + DatatypeConverter.printHexBinary(data)); //log.info("闆疯揪淇℃伅锛�" + host + "銆恜ort銆�" + port + "銆怷銆�" + longitude + "銆怸銆�" + lagitude + "銆怹銆�" + altitude); - data = MessageParsing.transferData(data);//鍘绘帀鍖呭ご鍜屽寘灏俱�佹牎楠屽強杞箟 + data = MessageHandler.transferData(data);//鍘绘帀鍖呭ご鍜屽寘灏俱�佹牎楠屽強杞箟 //region 璐熻浇澶磋В鏋� byte[] type = Arrays.copyOfRange(data, 0, 1);//鍛戒护绫诲瀷 // log.info("鍛戒护绫诲瀷:" + DatatypeConverter.printHexBinary(type)); byte[] cmdId = Arrays.copyOfRange(data, 1, 2);//鍛戒护ID - String cmdIdStr=DatatypeConverter.printHexBinary(cmdId); + String cmdIdStr = DatatypeConverter.printHexBinary(cmdId); //log.info("鍛戒护ID:" + DatatypeConverter.printHexBinary(cmdId)); byte[] payloadSize = Arrays.copyOfRange(data, 2, 4);//鏈夋晥璐熻浇澶у皬 payloadSize = toLittleEndian(payloadSize); @@ -206,7 +210,7 @@ List<ArdAlarmRadar> well = new ArrayList<>(); String alarmTime = ""; Integer targetNum = 0; - log.debug("澶勭悊闆疯揪"+radarName+"鏁版嵁-->鍛戒护ID:"+cmdIdStr); + log.debug("澶勭悊闆疯揪" + radarName + "鏁版嵁-->鍛戒护ID:" + cmdIdStr); //闆疯揪绉诲姩闃茬伀鎶ヨ if (Arrays.equals(cmdId, new byte[]{0x01})) { //region 鍛婅淇℃伅鍙嶉 @@ -315,15 +319,14 @@ double thetaRadians = Math.toRadians(fTy + 90); // 浣跨敤姝e鸡鍑芥暟璁$畻瀵硅竟闀垮害 Distance = Math.sin(thetaRadians) * Distance; - if(Distance<0) - { + if (Distance < 0) { continue;//杩囨护璺濈灏忎簬0鐨勮剰鏁版嵁 } //log.debug("鐩爣鎶曞奖璺濈(m):" + Distance); Double[] radarXY = {radarLongitude, radarLagitude}; Double[] alarmXY = GisUtils.CalculateCoordinates(radarXY, Distance, (double) fTx); - log.debug("鎶ヨ淇℃伅锛�" + "銆恟adarName銆�" + radarName + "銆恡argetId銆�"+ targetId + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + alarmTime + "銆恘ame銆�" + alarmPointName+"銆怐istance銆�"+Distance); + log.debug("鎶ヨ淇℃伅锛�" + "銆恟adarName銆�" + radarName + "銆恡argetId銆�" + targetId + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + alarmTime + "銆恘ame銆�" + alarmPointName + "銆怐istance銆�" + Distance); ArdAlarmRadar ardAlarmRadar = new ArdAlarmRadar(); ardAlarmRadar.setTargetId(targetId); ardAlarmRadar.setName(alarmPointName); @@ -350,7 +353,7 @@ radarAlarmData.setAlarmTime(alarmTime); radarAlarmData.setArdAlarmRadars(radarAlarmInfos); MqttProducer.publish(2, false, "radar", JSON.toJSONString(radarAlarmData)); - if (radarFollowInfos.size() >0) { + if (radarFollowInfos.size() > 0) { radarAlarmData.setArdFollowRadars(radarFollowInfos); //褰撳墠闆疯揪鎵弿瀛樺湪寮曞璺熻釜鏁版嵁锛屽彧淇濈暀鏈�鍚庝竴娆¢攣瀹氱殑鏁版嵁 MqttProducer.publish(2, false, "radarFollowGuide", JSON.toJSONString(radarAlarmData)); @@ -437,7 +440,7 @@ //log.info("鎵�灞炲憡璀﹀尯鍩熷悕绉�:" + DatatypeConverter.printHexBinary(szName)); String alarmPointName = ByteUtils.bytesToStringZh(szName); // log.info("鎵�灞炲憡璀﹀尯鍩熷悕绉�:" + alarmPointName); - log.debug("鎶ヨ淇℃伅锛�"+ "銆恟adarName銆�" + radarName + "銆恡argetId銆�" + targetId + "銆恘ame銆�" + alarmPointName + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + alarmTime); + log.debug("鎶ヨ淇℃伅锛�" + "銆恟adarName銆�" + radarName + "銆恡argetId銆�" + targetId + "銆恘ame銆�" + alarmPointName + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + alarmTime); ArdAlarmRadar ardAlarmRadar = new ArdAlarmRadar(); ardAlarmRadar.setTargetId(targetId); ardAlarmRadar.setName(alarmPointName); -- Gitblit v1.9.3