| | |
| | | package com.ard.tianyu.netty.handler; |
| | | |
| | | import com.ard.tianyu.model.cache.TyTcpServerCache; |
| | | import com.ard.tianyu.netty.TyNettyTcpClient; |
| | | import com.ard.tianyu.netty.command.BaseCommand; |
| | | import com.ard.tianyu.netty.command.HeartbeatCommand; |
| | | import com.ard.tianyu.netty.command.BaseCmd; |
| | | import com.ard.tianyu.service.ITyService; |
| | | import io.netty.channel.ChannelHandler; |
| | | import io.netty.channel.ChannelHandlerContext; |
| | |
| | | @Component |
| | | @Slf4j |
| | | @ChannelHandler.Sharable |
| | | public class ClientHandler extends SimpleChannelInboundHandler<BaseCommand> { |
| | | public class ClientHandler extends SimpleChannelInboundHandler<BaseCmd> { |
| | | |
| | | @Resource |
| | | private ITyService tyService; |
| | |
| | | private TyNettyTcpClient tyNettyTcpClient; |
| | | |
| | | @Override |
| | | public void channelRead0(ChannelHandlerContext ctx, BaseCommand command) { |
| | | public void channelRead0(ChannelHandlerContext ctx, BaseCmd command) { |
| | | InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress(); |
| | | String host = ipSocket.getHostString(); |
| | | int port = ipSocket.getPort(); |
| | | tyService.processMessage(host + ":" + port, command); |
| | | tyService.processReplyMessage(host + ":" + port, command); |
| | | } |
| | | |
| | | @Override |
| | |
| | | @Override |
| | | public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { |
| | | log.error("发生异常: ", cause); // 使用日志记录异常 |
| | | ctx.close(); |
| | | // ctx.close(); |
| | | } |
| | | |
| | | @Override |
| | |
| | | if (event.state() == IdleState.READER_IDLE) { |
| | | log.info("客户端读超时"); |
| | | } else if (event.state() == IdleState.WRITER_IDLE) { |
| | | log.info("写空闲发送⼼跳!"); |
| | | HeartbeatCommand msg = new HeartbeatCommand(System.currentTimeMillis()); |
| | | ctx.writeAndFlush(msg); |
| | | // log.info("写空闲发送⼼跳!"); |
| | | // HeartbeatCommand msg = new HeartbeatCommand(System.currentTimeMillis()); |
| | | //ctx.writeAndFlush(msg); |
| | | } else if (event.state() == IdleState.ALL_IDLE) { |
| | | log.info("客户端所有操作超时"); |
| | | } |
| | |
| | | int port = ipSocket.getPort(); |
| | | String host = ipSocket.getHostString(); |
| | | log.error("与天宇服务{}:{}连接断开!", host, port); |
| | | |
| | | TyTcpServerCache.putTcpServerCache(host + ":" + port, false); |
| | | ctx.channel().eventLoop().schedule(() -> { |
| | | log.error("天宇服务端链接不上,开始重连操作..."); |
| | | try { |
| | | tyNettyTcpClient.initOneConnection(host, port); |
| | | tyNettyTcpClient.initConnection(host, port); |
| | | } catch (Exception e) { |
| | | log.error("天宇服务端连接异常: {}", e.getMessage()); |
| | | } |