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