| | |
| | | import io.netty.channel.socket.nio.NioSocketChannel; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.boot.ApplicationArguments; |
| | | import org.springframework.boot.ApplicationRunner; |
| | | import org.springframework.core.annotation.Order; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | |
| | | */ |
| | | @Component |
| | | @Slf4j(topic = "netty") |
| | | public class ClientInitialize { |
| | | @Order(2) |
| | | public class ClientInitialize implements ApplicationRunner { |
| | | |
| | | @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初始化配置 |
| | | */ |
| | |
| | | } |
| | | }); |
| | | } |
| | | Thread.sleep(3000); |
| | | Thread.sleep(10000); |
| | | } catch (Exception e) { |
| | | log.error("Netty初始化配置监听地址出现异常"); |
| | | e.printStackTrace(); |
| | |
| | | // 异步连接tcp服务端 |
| | | bootstrap.remoteAddress(host, port).connect().addListener((ChannelFuture futureListener) -> { |
| | | if (!futureListener.isSuccess()) { |
| | | log.error(host + ":" + port + "雷达TCP服务端连接失败"); |
| | | log.debug("雷达【" + host + ":" + port + "】连接失败"); |
| | | futureListener.channel().close(); |
| | | // 连接失败信息插入Set |
| | | falseConnectSet.add(ardEquipRadar); |
| | | // 连接失败信息从map移除 |
| | | tureConnectMap.remove(futureListener.channel().id()); |
| | | SuccessConnectMap.remove(ardEquipRadar.getId()); |
| | | } else { |
| | | log.info(host + ":" + port + "雷达TCP服务端连接成功"); |
| | | log.debug("雷达【" + host + ":" + port + "】连接成功"); |
| | | // 连接成功信息从Set拔除 |
| | | falseConnectSet.remove(ardEquipRadar); |
| | | // 连接成功信息写入map |
| | | tureConnectMap.put(futureListener.channel().id(), ardEquipRadar); |
| | | SuccessConnectMap.put(ardEquipRadar.getId(),futureListener.channel()); |
| | | } |
| | | }); |
| | | } |
| | |
| | | /** |
| | | * 初始化方法 |
| | | */ |
| | | @PostConstruct |
| | | public void initialize() { |
| | | @Override |
| | | public void run(ApplicationArguments args) { |
| | | if (!tcpClientEnable) { |
| | | return; |
| | | } |
| | |
| | | for (ArdEquipRadar ardEquipRadar : ardEquipRadars) { |
| | | String host = ardEquipRadar.getIp(); |
| | | Integer port = Integer.valueOf(ardEquipRadar.getPort()); |
| | | log.info("TCP客户端尝试连接:" + host + ":" + port); |
| | | log.debug("TCP client try to connect radar【:" + host + ":" + port+"】"); |
| | | connectServer(ardEquipRadar);//连接每一个雷达服务 |
| | | } |
| | | } |