From 1c490ff27a0eeb4327923a9367f3a7c2aaa929b2 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期四, 28 十二月 2023 14:03:11 +0800
Subject: [PATCH] 优化雷达tcp客户端

---
 src/main/java/com/ard/utils/netty/tcp/BootNettyChannelInboundHandlerAdapter.java |   74 +++++++++++++++----------------------
 1 files changed, 30 insertions(+), 44 deletions(-)

diff --git a/src/main/java/com/ard/utils/netty/tcp/BootNettyChannelInboundHandlerAdapter.java b/src/main/java/com/ard/utils/netty/tcp/BootNettyChannelInboundHandlerAdapter.java
index d0bf436..561d287 100644
--- a/src/main/java/com/ard/utils/netty/tcp/BootNettyChannelInboundHandlerAdapter.java
+++ b/src/main/java/com/ard/utils/netty/tcp/BootNettyChannelInboundHandlerAdapter.java
@@ -9,10 +9,7 @@
 import com.ard.utils.util.GisUtils;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.EmptyByteBuf;
-import io.netty.channel.ChannelHandler;
-import io.netty.channel.ChannelHandlerContext;
-import io.netty.channel.ChannelId;
-import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.channel.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 
@@ -21,59 +18,44 @@
 import java.net.InetSocketAddress;
 import java.text.SimpleDateFormat;
 import java.util.*;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
 
 import static com.ard.utils.util.ByteUtils.byteToBitString;
 import static com.ard.utils.util.ByteUtils.toLittleEndian;
 
 @Slf4j(topic = "netty")
-@ChannelHandler.Sharable
-public class BootNettyChannelInboundHandlerAdapter extends ChannelInboundHandlerAdapter {
-    
+public class BootNettyChannelInboundHandlerAdapter extends SimpleChannelInboundHandler<ByteBuf> {
+
     /**
      * 浠庢湇鍔$鏀跺埌鏂扮殑鏁版嵁鏃讹紝杩欎釜鏂规硶浼氬湪鏀跺埌娑堟伅鏃惰璋冪敤
      */
     @Override
-    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception, IOException {
-        if(msg == null){
-            return;
-        }
-
-        //System.out.println("channelRead:read msg:"+msg1.toString());
-        //BootNettyClientChannel bootNettyClientChannel = BootNettyClientChannelCache.get("clientId:"+ctx.channel().id().toString());
-        //if(bootNettyClientChannel != null){
-        //    System.out.println("to do");
-        //    bootNettyClientChannel.setLast_data(msg1.toString());
-        //}
+    protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) {
         InetSocketAddress inSocket = (InetSocketAddress) ctx.channel().remoteAddress();
         String host = inSocket.getAddress().getHostAddress();
         int port = inSocket.getPort();
-        ArdEquipRadar ardEquipRadar = ClientInitialize.tureConnectMap.get(host+":"+port);
-        // msg杞珺uf
-        ByteBuf buf = (ByteBuf) msg;
-        // 鍒涘缓缂撳啿涓瓧鑺傛暟鐨勫瓧鑺傛暟缁�
-        byte[] byteArray = new byte[buf.readableBytes()];
-        // 鍐欏叆鏁扮粍
-        buf.readBytes(byteArray);
-        // 澶勭悊鎺ユ敹鍒扮殑娑堟伅
-        byte[] bytes = MessageParsing.receiveCompletePacket(byteArray);
-        if (bytes != null) {
-            processData(ardEquipRadar, bytes);
+        ArdEquipRadar ardEquipRadar = BootNettyClientChannelCache.getRadar(host + ":" + port);
+        if (ardEquipRadar != null) {
+            // 鍒涘缓缂撳啿涓瓧鑺傛暟鐨勫瓧鑺傛暟缁�
+            byte[] byteArray = new byte[msg.readableBytes()];
+            // 鍐欏叆鏁扮粍
+            msg.readBytes(byteArray);
+            // 澶勭悊鎺ユ敹鍒扮殑娑堟伅
+            byte[] bytes = MessageParsing.receiveCompletePacket(byteArray);
+            if (bytes != null) {
+                processData(ardEquipRadar, bytes);
+            }
         }
-        //鍥炲簲鏈嶅姟绔�
-        //ctx.write("I got server message thanks server!");
     }
- 
+
     /**
      * 浠庢湇鍔$鏀跺埌鏂扮殑鏁版嵁銆佽鍙栧畬鎴愭椂璋冪敤
      */
     @Override
     public void channelReadComplete(ChannelHandlerContext ctx) throws IOException {
-        System.out.println("channelReadComplete");
+        //System.out.println("channelReadComplete");
         ctx.flush();
     }
- 
+
     /**
      * 褰撳嚭鐜� Throwable 瀵硅薄鎵嶄細琚皟鐢紝鍗冲綋 Netty 鐢变簬 IO 閿欒鎴栬�呭鐞嗗櫒鍦ㄥ鐞嗕簨浠舵椂鎶涘嚭鐨勫紓甯告椂
      */
@@ -83,7 +65,7 @@
         cause.printStackTrace();
         ctx.close();//鎶涘嚭寮傚父锛屾柇寮�涓庡鎴风鐨勮繛鎺�
     }
- 
+
     /**
      * 瀹㈡埛绔笌鏈嶅姟绔涓�娆″缓绔嬭繛鎺ユ椂 鎵ц
      */
@@ -92,25 +74,29 @@
         super.channelActive(ctx);
         // 瀹㈡埛绔笌鏈嶅姟绔� 寤虹珛杩炴帴
         InetSocketAddress inSocket = (InetSocketAddress) ctx.channel().remoteAddress();
-        String clientIp = inSocket.getAddress().getHostAddress();
+        String host = inSocket.getAddress().getHostAddress();
         int port = inSocket.getPort();
-        log.debug("杩炴帴鎴愬姛锛氥��"+clientIp+":"+port+"銆�");
+        log.debug("杩炴帴鎴愬姛锛氥��" + host + ":" + port + "銆�");
     }
- 
+
     /**
      * 瀹㈡埛绔笌鏈嶅姟绔� 鏂繛鏃� 鎵ц
      */
     @Override
-    public void channelInactive(ChannelHandlerContext ctx) throws Exception{
+    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
         super.channelInactive(ctx);
         InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress();
         int port = ipSocket.getPort();
         String host = ipSocket.getHostString();
         log.error("涓庤澶�" + host + ":" + port + "杩炴帴鏂紑!");
         // 閲嶈繛
-        BootNettyClientThread thread = new BootNettyClientThread(host,port);
-        thread.start();
+        ArdEquipRadar ardEquipRadar = BootNettyClientChannelCache.getRadar(host + ":" + port);
+        if (ardEquipRadar != null) {
+            BootNettyClientThread thread = new BootNettyClientThread(ardEquipRadar);
+            thread.start();
+        }
     }
+
     /**
      * 瑙f瀽鎶ヨ鏁版嵁
      */
@@ -150,7 +136,7 @@
             List<ArdAlarmRadar> well = new ArrayList<>();
             String alarmTime = "";
             Integer targetNum = 0;
-            log.debug("Processing radar data 銆�" + radarName + "銆戞暟鎹�-->鍛戒护ID:"  + cmdIdStr + "浜岃繘鍒�:" + byteToBitString(cmdId[0]));
+            log.debug("Processing radar data 銆�" + radarName + "銆戞暟鎹�-->鍛戒护ID:" + cmdIdStr + "浜岃繘鍒�:" + byteToBitString(cmdId[0]));
             //闆疯揪绉诲姩闃茬伀鎶ヨ
             if (Arrays.equals(cmdId, new byte[]{0x01})) {
                 //region 鍛婅淇℃伅鍙嶉

--
Gitblit v1.9.3