From f485e99f717c8f4388dfb51010e41c0be62b62d8 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期五, 15 三月 2024 14:17:16 +0800
Subject: [PATCH] 雷达连接状态:改为0-客户端不通 1-在线 2-周扫未开

---
 src/main/java/com/ard/utils/netty/tcp/ClientHandler.java |   99 +++++++++++++++++++++++++++++++++----------------
 1 files changed, 67 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 4d22142..3b1ed6a 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,12 +16,12 @@
 
 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;
 import java.util.concurrent.TimeUnit;
 
+import static com.ard.utils.netty.tcp.ClientInitialize.aroundScanfMap;
 import static com.ard.utils.util.ByteUtils.toLittleEndian;
 
 /**
@@ -58,19 +57,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,19 +82,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);
+        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);
         }
     }
+
 
     /**
      * 閫氶亾鏁版嵁澶勭悊瀹屾垚
@@ -147,7 +153,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);
@@ -169,15 +175,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 {
@@ -186,12 +192,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);
@@ -205,7 +211,37 @@
             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[]{0x00})) {
+                //region 鍛婅淇℃伅鍙嶉
+                byte[] dfScanAngV = Arrays.copyOfRange(data, 4, 12);
+                dfScanAngV = toLittleEndian(dfScanAngV);
+                double ScanAngV = ByteUtils.bytesToDouble(dfScanAngV);
+                log.info("璁惧鎵弿鐨勪刊浠拌搴�:" + ScanAngV);
+
+                byte[] dfAngDy = Arrays.copyOfRange(data, 12, 20);
+                dfAngDy = toLittleEndian(dfAngDy);
+                double AngDy = ByteUtils.bytesToDouble(dfAngDy);
+                log.info("鍛ㄨ鍥惧儚鐨勫瀭鐩磋鍦鸿搴�:" + AngDy);
+
+                byte[] iImgW = Arrays.copyOfRange(data, 20, 24);
+                iImgW = toLittleEndian(iImgW);
+                int ImgW = ByteUtils.bytesToDecimal(iImgW);
+                log.info("鍛ㄨ鍥惧儚鐨勫:" + ImgW);
+                byte[] iImgH = Arrays.copyOfRange(data, 24, 28);
+                iImgH = toLittleEndian(iImgH);
+                int ImgH = ByteUtils.bytesToDecimal(iImgH);
+                log.info("鍛ㄨ鍥惧儚鐨勯珮:" + ImgH);
+
+                byte[] cStat = Arrays.copyOfRange(data, 28, 29);
+                // 鎻愬彇绗�4浣嶈嚦绗�6浣嶇殑鍊�
+                cStat = toLittleEndian(cStat);
+                int Stat = cStat[0] & 0b00000001;
+                log.info("璁惧褰撳墠宸ヤ綔鐘舵��:" + Stat);
+                aroundScanfMap.put(radar.getIp()+":"+radar.getPort(),Stat);
+
+            }
             //闆疯揪绉诲姩闃茬伀鎶ヨ
             if (Arrays.equals(cmdId, new byte[]{0x01})) {
                 //region 鍛婅淇℃伅鍙嶉
@@ -314,15 +350,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);
@@ -349,7 +384,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));
@@ -436,7 +471,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);
@@ -504,4 +539,4 @@
             log.error("闆疯揪鎶ユ枃瑙f瀽寮傚父:" + ex.getMessage());
         }
     }
-}
\ No newline at end of file
+}

--
Gitblit v1.9.3