package org.yzh.client.netty; import io.github.yezhihao.netmc.core.model.Message; import io.netty.channel.Channel; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import lombok.extern.slf4j.Slf4j; /** * @author yezhihao * https://gitee.com/yezhihao/jt808-server */ @Slf4j @ChannelHandler.Sharable public class TCPClientHandler extends ChannelInboundHandlerAdapter { private HandlerMapping handlerMapping; public TCPClientHandler(HandlerMapping handlerMapping) { this.handlerMapping = handlerMapping; } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { if (!(msg instanceof Message)) return; Message request = (Message) msg; Channel channel = ctx.channel(); try { Handler handler = handlerMapping.getHandler(request.getMessageId()); if (handler != null) { Message response = handler.invoke(request); if (response != null) { channel.writeAndFlush(response); } } } catch (Exception e) { log.warn(String.valueOf(request), e); } } @Override public void channelActive(ChannelHandlerContext ctx) { log.info(">>>>>连接到服务端{}", ctx.channel().remoteAddress()); } @Override public void channelInactive(ChannelHandlerContext ctx) { log.warn("<<<<<断开连接{}", ctx.channel().remoteAddress()); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable e) { log.error("<<<<<发生异常", e); } }