From b6cb77b58edd6d176dd8f0f55ff3d856fbc5880f Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期一, 11 三月 2024 10:27:20 +0800
Subject: [PATCH] 雷达重连间隔改为60秒

---
 src/main/java/com/ard/utils/netty/tcp/ClientInitialize.java |  297 +++++++++++++++++++++++++++++++---------------------------
 1 files changed, 158 insertions(+), 139 deletions(-)

diff --git a/src/main/java/com/ard/utils/netty/tcp/ClientInitialize.java b/src/main/java/com/ard/utils/netty/tcp/ClientInitialize.java
index c661f52..0520815 100644
--- a/src/main/java/com/ard/utils/netty/tcp/ClientInitialize.java
+++ b/src/main/java/com/ard/utils/netty/tcp/ClientInitialize.java
@@ -1,139 +1,158 @@
-package com.ard.utils.netty.tcp;
-
-/**
- * @Description:
- * @ClassName: init
- * @Author: 鍒樿嫃涔�
- * @Date: 2023骞�07鏈�05鏃�13:11
- * @Version: 1.0
- **/
-
-import com.ard.alarm.radar.domain.ArdEquipRadar;
-import com.ard.alarm.radar.service.IArdEquipRadarService;
-import com.ard.utils.netty.config.NettyTcpConfiguration;
-import io.netty.bootstrap.Bootstrap;
-import io.netty.channel.*;
-import io.netty.channel.nio.NioEventLoopGroup;
-import io.netty.channel.socket.SocketChannel;
-import io.netty.channel.socket.nio.NioSocketChannel;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.ApplicationArguments;
-import org.springframework.boot.ApplicationRunner;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArraySet;
-import java.util.function.Consumer;
-
-/**
- * 瀹㈡埛绔垵濮嬪寲
- *
- * @author lijiamin
- */
-@Component
-@Slf4j(topic = "netty")
-@Order(2)
-public class ClientInitialize implements ApplicationRunner {
-    @Resource
-    NettyTcpConfiguration nettyTcpConfig;
-    @Resource
-    IArdEquipRadarService ardEquipRadarService;
-
-    private Bootstrap bootstrap;
-    public static CopyOnWriteArraySet<ArdEquipRadar> falseConnectSet = new CopyOnWriteArraySet();
-    public static ConcurrentHashMap<ChannelId, ArdEquipRadar> tureConnectMap = new ConcurrentHashMap();
-    public static ConcurrentHashMap<String, Object> SuccessConnectMap = new ConcurrentHashMap();
-    /**
-     * Netty鍒濆鍖栭厤缃�
-     */
-    public void initNettyTcp() {
-        EventLoopGroup eventLoopGroup = new NioEventLoopGroup();
-        bootstrap = new Bootstrap();
-        bootstrap.group(eventLoopGroup)
-                .channel(NioSocketChannel.class)
-                .option(ChannelOption.TCP_NODELAY, true)
-                .option(ChannelOption.SO_KEEPALIVE, true)
-                .handler(new ChannelInitializer<SocketChannel>() {
-                    @Override
-                    protected void initChannel(SocketChannel socketChannel) {
-                        socketChannel.pipeline().addLast(new ClientHandler());
-                    }
-                });
-
-        // 寮傛鎸佺画鐩戝惉杩炴帴澶辫触鐨勫湴鍧�
-        CompletableFuture.runAsync(new Runnable() {
-            @Override
-            public void run() {
-                while (true) {
-                    try {
-                        if (falseConnectSet.size() != 0) {
-                            // 寰幆闆嗗悎鍐呭厓绱�
-                            falseConnectSet.forEach(new Consumer<ArdEquipRadar>() {
-                                @Override
-                                public void accept(ArdEquipRadar ardEquipRadar) {
-                                    connectServer(ardEquipRadar);
-                                }
-                            });
-                        }
-                        Thread.sleep(10000);
-                    } catch (Exception e) {
-                        log.error("Netty鍒濆鍖栭厤缃洃鍚湴鍧�鍑虹幇寮傚父");
-                        e.printStackTrace();
-                    }
-                }
-            }
-        });
-    }
-
-    /**
-     * 鏈嶅姟杩炴帴
-     *
-     * @param ardEquipRadar
-     */
-    public void connectServer(ArdEquipRadar ardEquipRadar) {
-        // 鑾峰彇鍦板潃鍙婄鍙�
-        String host = ardEquipRadar.getIp();
-        Integer port = ardEquipRadar.getPort();
-        // 寮傛杩炴帴tcp鏈嶅姟绔�
-        bootstrap.remoteAddress(host, port).connect().addListener((ChannelFuture futureListener) -> {
-            if (!futureListener.isSuccess()) {
-                log.debug("闆疯揪銆�" + host + ":" + port + "銆戣繛鎺ュけ璐�");
-                futureListener.channel().close();
-                // 杩炴帴澶辫触淇℃伅鎻掑叆Set
-                falseConnectSet.add(ardEquipRadar);
-                // 杩炴帴澶辫触淇℃伅浠巑ap绉婚櫎
-                tureConnectMap.remove(futureListener.channel().id());
-                SuccessConnectMap.remove(ardEquipRadar.getId());
-            } else {
-                log.debug("闆疯揪銆�" + host + ":" + port + "銆戣繛鎺ユ垚鍔�");
-                // 杩炴帴鎴愬姛淇℃伅浠嶴et鎷旈櫎
-                falseConnectSet.remove(ardEquipRadar);
-                // 杩炴帴鎴愬姛淇℃伅鍐欏叆map
-                tureConnectMap.put(futureListener.channel().id(), ardEquipRadar);
-                SuccessConnectMap.put(ardEquipRadar.getId(),futureListener.channel());
-            }
-        });
-    }
-
-    /**
-     * 鍒濆鍖栨柟娉�
-     */
-    @Override
-    public void run(ApplicationArguments args) {
-        if (!nettyTcpConfig.getEnabled()) {
-            return;
-        }
-        initNettyTcp();//鍒濆鍖杗ettyTcp
-        List<ArdEquipRadar> ardEquipRadars = ardEquipRadarService.selectArdEquipRadarList(new ArdEquipRadar());
-        for (ArdEquipRadar ardEquipRadar : ardEquipRadars) {
-            String host = ardEquipRadar.getIp();
-            Integer port = Integer.valueOf(ardEquipRadar.getPort());
-            log.debug("TCP client try to connect radar銆�" + host + ":" + port+"銆�");
-            connectServer(ardEquipRadar);//杩炴帴姣忎竴涓浄杈炬湇鍔�
-        }
-    }
-}
+package com.ard.utils.netty.tcp;
+
+import com.ard.alarm.radar.domain.ArdEquipRadar;
+import com.ard.alarm.radar.service.IArdEquipRadarService;
+import com.ard.utils.netty.config.NettyTcpConfiguration;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.*;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioSocketChannel;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.function.Consumer;
+
+/**
+ * 瀹㈡埛绔垵濮嬪寲
+ *
+ * @author lijiamin
+ */
+@Component
+@Slf4j(topic = "netty")
+@Order(2)
+public class ClientInitialize implements ApplicationRunner {
+    @Resource
+    NettyTcpConfiguration nettyTcpConfig;
+    @Resource
+    IArdEquipRadarService ardEquipRadarService;
+
+    private Bootstrap bootstrap;
+    public static CopyOnWriteArraySet<ArdEquipRadar> falseConnectSet = new CopyOnWriteArraySet();//澶辫触杩炴帴鐨勯浄杈維et
+    public static ConcurrentHashMap<String, ArdEquipRadar> trueConnectMap = new ConcurrentHashMap();//鎴愬姛杩炴帴鐨刬p绔彛瀵瑰簲鐨勯浄杈�
+    public static ConcurrentHashMap<String, MessageHandler> SucMessageHandlerMap = new ConcurrentHashMap();//鎴愬姛杩炴帴鐨刬p绔彛瀵瑰簲鐨勬姤鏂囪В鏋愬櫒
+    public static ConcurrentHashMap<String, Channel> SucChannelMap = new ConcurrentHashMap();//鎴愬姛杩炴帴鐨刬p绔彛瀵瑰簲鐨刵etty閫氶亾
+
+    /**
+     * Netty鍒濆鍖栭厤缃�
+     */
+    public void initNettyTcp() {
+        EventLoopGroup eventLoopGroup = new NioEventLoopGroup();
+        bootstrap = new Bootstrap();
+        bootstrap.group(eventLoopGroup)
+                .channel(NioSocketChannel.class)
+                .option(ChannelOption.TCP_NODELAY, true)
+                .option(ChannelOption.SO_KEEPALIVE, true)
+                .handler(new ChannelInitializer<SocketChannel>() {
+                    @Override
+                    protected void initChannel(SocketChannel socketChannel) {
+                        socketChannel.pipeline().addLast(new ClientHandler());
+                    }
+                });
+
+        //寮傛鎸佺画鐩戝惉杩炴帴澶辫触鐨勫湴鍧�
+        CompletableFuture.runAsync(new Runnable() {
+            @Override
+            public void run() {
+                while (true) {
+                    try {
+                        if (falseConnectSet.size() != 0) {
+                            // 寰幆闆嗗悎鍐呭厓绱�
+                            falseConnectSet.forEach(new Consumer<ArdEquipRadar>() {
+                                @Override
+                                public void accept(ArdEquipRadar radar) {
+                                    connectServer(radar);
+                                }
+                            });
+                        }
+                        Thread.sleep(60000);
+                    } catch (Exception e) {
+                        log.error("Netty鍒濆鍖栭厤缃洃鍚湴鍧�鍑虹幇寮傚父");
+                        e.printStackTrace();
+                    }
+                }
+            }
+        });
+    }
+
+    /**
+     * 鏈嶅姟杩炴帴
+     *
+     * @param ardEquipRadar
+     */
+    public void connectServer(ArdEquipRadar ardEquipRadar) {
+        // 鑾峰彇鍦板潃鍙婄鍙�
+        String host = ardEquipRadar.getIp();
+        Integer port = ardEquipRadar.getPort();
+        String ipPort = host + ":" + port;
+        // 寮傛杩炴帴tcp鏈嶅姟绔�
+        bootstrap.remoteAddress(host, port).connect().addListener((ChannelFuture futureListener) -> {
+            if (futureListener.isSuccess()) {
+                log.debug("闆疯揪銆�" + ipPort + "銆戣繛鎺ユ垚鍔�");
+                // 杩炴帴鎴愬姛淇℃伅浠嶴et鎷旈櫎
+                falseConnectSet.remove(ardEquipRadar);
+                // 杩炴帴鎴愬姛淇℃伅鍐欏叆map
+                trueConnectMap.put(ipPort, ardEquipRadar);
+                SucMessageHandlerMap.put(ipPort, new MessageHandler());
+                SucChannelMap.put(ipPort, futureListener.channel());
+            } else {
+                log.debug("闆疯揪銆�" + ipPort + "銆戣繛鎺ュけ璐�");
+                futureListener.channel().close();
+                // 杩炴帴澶辫触淇℃伅鎻掑叆Set
+                falseConnectSet.add(ardEquipRadar);
+
+            }
+        });
+    }
+
+    /**
+     * 鍒濆鍖栨柟娉�
+     */
+    @Override
+    public void run(ApplicationArguments args) {
+        if (!nettyTcpConfig.getEnabled()) {
+            return;
+        }
+        initNettyTcp();//鍒濆鍖杗ettyTcp
+        List<ArdEquipRadar> ardEquipRadars = ardEquipRadarService.selectArdEquipRadarList(new ArdEquipRadar());
+        for (ArdEquipRadar ardEquipRadar : ardEquipRadars) {
+            String host = ardEquipRadar.getIp();
+            Integer port = Integer.valueOf(ardEquipRadar.getPort());
+            log.debug("TCP client try to connect radar銆�" + host + ":" + port + "銆�");
+            connectServer(ardEquipRadar);//杩炴帴姣忎竴涓浄杈炬湇鍔�
+        }
+    }
+
+    /**
+     * 鐩戞祴闆疯揪杩炴帴鐘舵��
+     */
+    @Scheduled(cron = "0/3 * * * * ?")
+    public void monitorConnectStatus() {
+        log.debug("瀹氭椂鐩戞祴闆疯揪杩炴帴鐘舵��");
+        List<ArdEquipRadar> ardEquipRadars = ardEquipRadarService.selectArdEquipRadarList(new ArdEquipRadar());
+        ardEquipRadars.stream().forEach(ardEquipRadar -> {
+
+            boolean online = trueConnectMap.containsKey(ardEquipRadar.getIp() + ":" + ardEquipRadar.getPort());
+            if (online) {
+                if (ardEquipRadar.getState() == null || !ardEquipRadar.getState().equals("1")) {
+                    ardEquipRadar.setState("1");
+                    ardEquipRadarService.updateArdEquipRadar(ardEquipRadar);
+                }
+            } else {
+                if (ardEquipRadar.getState() == null || !ardEquipRadar.getState().equals("0")) {
+                    ardEquipRadar.setState("0");
+                    ardEquipRadarService.updateArdEquipRadar(ardEquipRadar);
+                }
+            }
+        });
+    }
+}

--
Gitblit v1.9.3