58 lines
2.0 KiB
Java
58 lines
2.0 KiB
Java
|
|
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<NioSocketChannel>() {
|
||
|
|
@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);
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|