package io.nettythrift.bootstrap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import io.netty.channel.DefaultEventLoop;
import io.netty.channel.group.ChannelGroup;
import io.netty.channel.group.DefaultChannelGroup;
import io.nettythrift.core.ThriftServerDef;
/**
* 通用Thrift服务
*
* @author HouKangxi
*
*/
public class ServerBootstrap extends CommonServer implements Runnable {
private static Logger logger = LoggerFactory.getLogger(ServerBootstrap.class);
private final ChannelGroup allChannels;
private final ThriftServerDef serverDef;
public ServerBootstrap(ThriftServerDef serverDef) {
this(serverDef, new DefaultChannelGroup(new DefaultEventLoop()));
}
public ServerBootstrap(ThriftServerDef serverDef, ChannelGroup allChannels) {
this.serverDef = serverDef;
this.allChannels = allChannels;
Runtime.getRuntime().addShutdownHook(new Thread(this));
}
public ChannelGroup getAllChannels() {
return allChannels;
}
@Override
public void run() {
logger.info("server closing[channels:{}]...", allChannels.size());
close();
}
@Override
public void close() {
allChannels.close().awaitUninterruptibly();
super.close();
}
public void start() throws Exception {
super.start(serverDef.serverPort, serverDef.codecInstaller);
}
public void start(int bossThreads, int workThreads) throws Exception {
start(serverDef.serverPort, serverDef.codecInstaller, bossThreads, workThreads);
}
}