From 1fd64b07ddb99c2d9cc8a358b71aceb6a2c81492 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期三, 05 七月 2023 15:58:31 +0800
Subject: [PATCH] 修改nettyTCP客户端断开重连 增加数据库连接池 修改日志打印

---
 src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java |   79 ++++++++++++++++++++++++---------------
 1 files changed, 48 insertions(+), 31 deletions(-)

diff --git a/src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java b/src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java
index fa6016c..37d339e 100644
--- a/src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java
+++ b/src/main/java/com/ard/utils/tcp/NettyTcpClientHandler.java
@@ -11,20 +11,22 @@
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.SimpleChannelInboundHandler;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import javax.xml.bind.DatatypeConverter;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 
+
 /**
- * @Description: tcp瀹㈡埛绔鐞�
+ * @Description: tcp瀹㈡埛绔鐞�-寮冪敤
  * @ClassName: NettyTcpClientHandler
  * @Author: 鍒樿嫃涔�
  * @Date: 2023骞�06鏈�25鏃�17:02
  * @Version: 1.0
  **/
-@Slf4j(topic = "radar")
+@Slf4j(topic = "netty")
 public class NettyTcpClientHandler extends SimpleChannelInboundHandler<ByteBuf> {
 
     private String host;
@@ -72,7 +74,12 @@
         heartbeatTask = context.executor().scheduleAtFixedRate(() -> {
             // 鍙戦�佸績璺虫秷鎭�
             ByteBuf message = context.alloc().buffer();
-            byte[] heart = {0x01, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00, (byte) 0x83, (byte) 0x88, 0x5d, 0x71, 0x01, 0x02, 0x00};
+            byte[] header = {0x01, 0x02, 0x01};
+            byte[] payload = {0x10, 0x00, 0x00, 0x00};
+            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};
             String hexString = DatatypeConverter.printHexBinary(heart);
             log.info("鍙戦�佸績璺�:" + hexString);
             message.writeBytes(heart);
@@ -105,23 +112,32 @@
      */
     public void processData(byte[] data) {
         try {
+            //region crc鏍¢獙-鐩墠浠呯敤浜庢樉绀烘牎楠岀粨鏋�
+            Boolean crc32Check = MessageParsing.CRC32Check(data);
+            if (!crc32Check) {
+                log.info("CRC32鏍¢獙涓嶉�氳繃");
+            } else {
+                log.info("CRC32鏍¢獙閫氳繃");
+            }
+            //endregion
             //log.info("鍘熷鏁版嵁:" + DatatypeConverter.printHexBinary(data));
-            log.info("闆疯揪淇℃伅锛�" + host + "銆恜ort銆�" + port + "銆怷銆�" + longitude + "銆怸銆�" + lagitude + "銆怹銆�" + altitude);
+            //log.info("闆疯揪淇℃伅锛�" + host + "銆恜ort銆�" + port + "銆怷銆�" + longitude + "銆怸銆�" + lagitude + "銆怹銆�" + altitude);
             data = MessageParsing.transferData(data);//鍘绘帀鍖呭ご鍜屽寘灏俱�佹牎楠屽強杞箟
-
+            //region 璐熻浇澶磋В鏋�
             byte[] type = Arrays.copyOfRange(data, 0, 1);//鍛戒护绫诲瀷
             //  log.info("鍛戒护绫诲瀷:" + DatatypeConverter.printHexBinary(type));
-
             byte[] cmdId = Arrays.copyOfRange(data, 1, 2);//鍛戒护ID
             //  log.info("鍛戒护ID:" + DatatypeConverter.printHexBinary(cmdId));
-
             byte[] payloadSize = Arrays.copyOfRange(data, 2, 4);//鏈夋晥璐熻浇澶у皬
             payloadSize = ByteUtils.toLittleEndian(payloadSize);
             int payloadSizeToDecimal = ByteUtils.bytesToDecimal(payloadSize);
             // log.info("鏈夋晥璐熻浇澶у皬(杞暣鍨�):" + payloadSizeToDecimal);
+            //endregion
             List<ArdAlarmRadar> radarAlarmInfos = new ArrayList<>();
-            String alarmTime="";
+            String alarmTime = "";
+            Integer targetNum = 0;
             if (Arrays.equals(cmdId, new byte[]{0x01})) {
+                //region 鍛婅淇℃伅鍙嶉
                 byte[] dwTim = Arrays.copyOfRange(data, 4, 8);
                 dwTim = ByteUtils.toLittleEndian(dwTim);
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -131,8 +147,11 @@
 
                 byte[] wTargetNum = Arrays.copyOfRange(data, 8, 10);
                 wTargetNum = ByteUtils.toLittleEndian(wTargetNum);
-                int targetNum = ByteUtils.bytesToDecimal(wTargetNum);
-                //log.info("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum);
+                targetNum = ByteUtils.bytesToDecimal(wTargetNum);
+                if (targetNum == 0) {
+                    return;
+                }
+                log.info("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum);
 
                 //瑙f瀽NET_TARGET_UNIT(64鏄疦ET_TARGET_HEAD鐨勫瓧鑺傛暟)
                 int uintSize = (payloadSizeToDecimal - 64) / targetNum;
@@ -213,7 +232,7 @@
                     // log.info("鎶ヨ绫诲瀷:" + alarmType);
 
                     byte[] szName = Arrays.copyOfRange(data, index + 64, index + 96);
-                    int position = findIndexOfDoubleZero(szName);
+                    int position = ByteUtils.findIndexOfDoubleZero(szName);
                     String alarmPointName;
                     if (position != -1) {
                         byte[] result = new byte[position];
@@ -242,10 +261,11 @@
                     ardAlarmRadar.setAlarmType(alarmType);
                     radarAlarmInfos.add(ardAlarmRadar);
                 }
-
+                //endregion
             }
             if (Arrays.equals(cmdId, new byte[]{0x04})) {
-                //String hexString = DatatypeConverter.printHexBinary(data);
+                //region鎶芥补鏈篈I鐘舵�佸弽棣�
+                String hexString = DatatypeConverter.printHexBinary(data);
                 //log.info(hexString);
 
                 byte[] dwTim = Arrays.copyOfRange(data, 4, 8);
@@ -257,9 +277,11 @@
 
                 byte[] wTargetNum = Arrays.copyOfRange(data, 8, 10);
                 wTargetNum = ByteUtils.toLittleEndian(wTargetNum);
-                int targetNum = ByteUtils.bytesToDecimal(wTargetNum);
-                //log.info("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum);
-
+                targetNum = ByteUtils.bytesToDecimal(wTargetNum);
+                log.info("鐩爣鎬荤偣鏁�(杞暣鍨�):" + targetNum);
+                if (targetNum == 0) {
+                    return;
+                }
                 //瑙f瀽NET_TARGET_UNIT(64鏄疦ET_TARGET_HEAD鐨勫瓧鑺傛暟)
                 int uintSize = (payloadSizeToDecimal - 64) / targetNum;
                 //log.info("鍗曟潯鎶ヨ澶у皬:" + uintSize);
@@ -307,9 +329,9 @@
                     //log.info("鐩爣褰撳墠鐘舵��:" + binaryString);
                     // 鎻愬彇绗�0浣嶅��
                     // 浣跨敤浣嶈繍绠楁搷浣滃垽鏂0浣嶆槸鍚︿负1
-                    boolean isBitSet = (cStat[0] & 0x01) == 0x00;
+                    boolean isB0 = (cStat[0] & 0x01) == 0x00;
                     // 鍒ゆ柇鎻愬彇鐨勫��
-                    if (isBitSet) {
+                    if (isB0) {
                         alarmType = "闆疯揪鎶芥补鏈哄仠鏈�";
                     } else {
                         continue;
@@ -318,7 +340,7 @@
 
                     byte[] szName = Arrays.copyOfRange(data, index + 32, index + 64);
                     //log.info("鎵�灞炲憡璀﹀尯鍩熷悕绉�:" + DatatypeConverter.printHexBinary(szName));
-                    int position = findIndexOfDoubleZero(szName);
+                    int position = ByteUtils.findIndexOfDoubleZero(szName);
                     String alarmPointName;
                     if (position != -1) {
                         byte[] result = new byte[position];
@@ -335,6 +357,13 @@
                     ardAlarmRadar.setAlarmType(alarmType);
                     radarAlarmInfos.add(ardAlarmRadar);
                 }
+                //endregion
+            }
+            if (StringUtils.isEmpty(alarmTime)) {
+                return;
+            }
+            if (targetNum == 0) {
+                return;
             }
             RadarAlarmData radarAlarmData = new RadarAlarmData();
             radarAlarmData.setRadarId(id);
@@ -345,18 +374,6 @@
         } catch (Exception ex) {
             log.error("闆疯揪鎶ユ枃瑙f瀽寮傚父:" + ex.getMessage());
         }
-    }
-
-    /**
-     * 鎵惧埌00鐨勭储寮曚綅缃�
-     */
-    private int findIndexOfDoubleZero(byte[] bytes) {
-        for (int i = 0; i < bytes.length - 1; i++) {
-            if (bytes[i] == 0x00) {
-                return i;
-            }
-        }
-        return -1;
     }
 
 }

--
Gitblit v1.9.3