package com.tongran.agenttcp.server; import com.tongran.agenttcp.server.handler.AgentDecoderHandler; import com.tongran.agenttcp.server.handler.AgentDispatcherHandler; import com.tongran.agenttcp.server.handler.AgentEncoderHandler; import com.tongran.agenttcp.server.netty.BaseNettyServer; import com.tongran.agenttcp.server.netty.core.handler.TCPListenHandler; import io.netty.channel.ChannelInitializer; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.timeout.IdleStateHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.annotation.Resource; @Configuration public class AgentNettyServer extends BaseNettyServer { @Resource private AgentNettyConfig config; @Resource private TCPListenHandler tcpListenHandler; @Resource private AgentDecoderHandler decoderHandler; @Resource private AgentEncoderHandler encoderHandler; @Resource private AgentDispatcherHandler dispatcherHandler; protected AgentNettyServer(AgentNettyConfig config) { super(config); } @Bean(name = "NettyCharge", initMethod = "start", destroyMethod = "stop") BaseNettyServer run() { config.setHander(new ChannelInitializer() { @Override public void initChannel(NioSocketChannel ch) throws Exception { ch.pipeline().addLast(new IdleStateHandler(config.readerIdleTime, config.writerIdleTime, config.allIdleTime));// 心跳 ch.pipeline().addLast(tcpListenHandler);// 监听器 //入栈 ch.pipeline().addLast(decoderHandler);//解码器 //出栈 ch.pipeline().addLast(encoderHandler);//加码器 // 业务分发是入站最后一个处理器, 出站第一个处理器, 位置要放在最后 ch.pipeline().addLast(businessGroup, dispatcherHandler);//业务分发 这里使用业务线程组 } }); return new AgentNettyServer(config); } }