liusuyi
2024-10-22 ce309155d4a0d750f786ca242b36bba8fc0bbf14
ard-work/src/main/java/com/ard/tianyu/netty/handler/ClientHandler.java
@@ -10,9 +10,7 @@
import io.netty.handler.timeout.IdleState;
import io.netty.handler.timeout.IdleStateEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;
@@ -23,17 +21,17 @@
@ChannelHandler.Sharable
public class ClientHandler extends SimpleChannelInboundHandler<BaseCommand> {
    @Autowired
    ITyService tyService;
    @Resource
    private ITyService tyService;
    @Resource
    private TyNettyTcpClient tyNettyTcpClient;
    @Override
    public void channelRead0(ChannelHandlerContext ctx, BaseCommand command){
        InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress();
        String host = ipSocket.getHostString();
        int port = ipSocket.getPort();
    public void channelRead0(ChannelHandlerContext ctx, BaseCommand command) {
        //InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress();
        //String host = ipSocket.getHostString();
        //int port = ipSocket.getPort();
        //tyService.processMessage(host + "/" + port, msg);
    }
@@ -47,7 +45,7 @@
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        cause.printStackTrace();
        log.error("发生异常: ", cause); // 使用日志记录异常
        ctx.close();
    }
@@ -58,9 +56,9 @@
            if (event.state() == IdleState.READER_IDLE) {
                log.info("客户端读超时");
            } else if (event.state() == IdleState.WRITER_IDLE) {
//                HeartbeatCommand msg = new HeartbeatCommand(System.currentTimeMillis());
//                log.info("发送⼼跳!");//1652345657305  1652345707631
//                ctx.writeAndFlush(msg);
                log.info("写空闲发送⼼跳!");
                HeartbeatCommand msg = new HeartbeatCommand(System.currentTimeMillis());
                ctx.writeAndFlush(msg);
            } else if (event.state() == IdleState.ALL_IDLE) {
                log.info("客户端所有操作超时");
            }
@@ -72,18 +70,18 @@
        InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress();
        int port = ipSocket.getPort();
        String host = ipSocket.getHostString();
        log.error("与天宇设备" + host + ":" + port + "连接断开!");
        ctx.channel().eventLoop().schedule(new Runnable() {
            @Override
            public void run() {
                log.error("服务端链接不上,开始重连操作...");
                try {
                    tyNettyTcpClient.initOneConnection(host, port);
                } catch (Exception e) {
                    e.printStackTrace();
                }
        log.error("与天宇服务{}:{}连接断开!", host, port);
        ctx.channel().eventLoop().schedule(() -> {
            log.error("天宇服务端链接不上,开始重连操作...");
            try {
                tyNettyTcpClient.initOneConnection(host, port);
            } catch (Exception e) {
                log.error("天宇服务端连接异常: {}", e.getMessage());
            }
        }, 5, TimeUnit.SECONDS);
        super.channelInactive(ctx);
    }
}