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