package dgm.driver.server; import com.google.common.util.concurrent.AbstractIdleService; import com.google.inject.Inject; import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelFactory; import org.jboss.netty.channel.group.ChannelGroup; import org.jboss.netty.channel.group.DefaultChannelGroup; import java.net.SocketAddress; /** * */ public class Server extends AbstractIdleService { final ChannelGroup allChannels = new DefaultChannelGroup(); final SocketAddress address; final ServerBootstrap bootstrap; final ChannelFactory factory; @Inject public Server(ServerBootstrap bootstrap, ChannelFactory factory, SocketAddress address) { this.address = address; this.bootstrap = bootstrap; this.factory = factory; } @Override protected final void startUp() throws Exception { //log.info("Server started at {}", address); final Channel channel = bootstrap.bind(address); allChannels.add(channel); } @Override protected final void shutDown() throws Exception { allChannels.close().awaitUninterruptibly(); factory.releaseExternalResources(); } }