| | |
| | | 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; |
| | |
| | | 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(); |
| | | public static CopyOnWriteArraySet<ArdEquipRadar> falseConnectSet = new CopyOnWriteArraySet();//失败连接的雷达Set |
| | | public static ConcurrentHashMap<String, ArdEquipRadar> trueConnectMap = new ConcurrentHashMap();//成功连接的ip端口对应的雷达 |
| | | public static ConcurrentHashMap<String, MessageHandler> SucMessageHandlerMap = new ConcurrentHashMap();//成功连接的ip端口对应的报文解析器 |
| | | public static ConcurrentHashMap<String, Channel> SucChannelMap = new ConcurrentHashMap();//成功连接的ip端口对应的netty通道 |
| | | |
| | | /** |
| | | * Netty初始化配置 |
| | | */ |
| | |
| | | } |
| | | }); |
| | | |
| | | // 异步持续监听连接失败的地址 |
| | | //异步持续监听连接失败的地址 |
| | | CompletableFuture.runAsync(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | |
| | | // 循环集合内元素 |
| | | falseConnectSet.forEach(new Consumer<ArdEquipRadar>() { |
| | | @Override |
| | | public void accept(ArdEquipRadar ardEquipRadar) { |
| | | connectServer(ardEquipRadar); |
| | | public void accept(ArdEquipRadar radar) { |
| | | connectServer(radar); |
| | | } |
| | | }); |
| | | } |
| | |
| | | // 获取地址及端口 |
| | | 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("雷达【" + host + ":" + port + "】连接失败"); |
| | | futureListener.channel().close(); |
| | | // 连接失败信息插入Set |
| | | falseConnectSet.add(ardEquipRadar); |
| | | // 连接失败信息从map移除 |
| | | tureConnectMap.remove(futureListener.channel().id()); |
| | | SuccessConnectMap.remove(ardEquipRadar.getId()); |
| | | } else { |
| | | log.debug("雷达【" + host + ":" + port + "】连接成功"); |
| | | if (futureListener.isSuccess()) { |
| | | log.debug("雷达【" + ipPort + "】连接成功"); |
| | | // 连接成功信息从Set拔除 |
| | | falseConnectSet.remove(ardEquipRadar); |
| | | // 连接成功信息写入map |
| | | tureConnectMap.put(futureListener.channel().id(), ardEquipRadar); |
| | | SuccessConnectMap.put(ardEquipRadar.getId(),futureListener.channel()); |
| | | 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); |
| | | |
| | | } |
| | | }); |
| | | } |
| | |
| | | for (ArdEquipRadar ardEquipRadar : ardEquipRadars) { |
| | | String host = ardEquipRadar.getIp(); |
| | | Integer port = Integer.valueOf(ardEquipRadar.getPort()); |
| | | log.debug("TCP client try to connect radar【" + host + ":" + port+"】"); |
| | | log.debug("TCP client try to connect radar【" + host + ":" + port + "】"); |
| | | connectServer(ardEquipRadar);//连接每一个雷达服务 |
| | | } |
| | | } |