package org.jboss.pitbull.internal.nio.http; import org.jboss.pitbull.internal.logging.Logger; import org.jboss.pitbull.internal.nio.socket.Acceptor; import org.jboss.pitbull.internal.nio.socket.ManagedChannelFactory; import org.jboss.pitbull.internal.nio.socket.SSLChannelFactory; import org.jboss.pitbull.internal.nio.socket.Worker; import org.jboss.pitbull.internal.util.registry.UriRegistry; import javax.net.ssl.SSLContext; import java.net.InetSocketAddress; import java.nio.channels.ServerSocketChannel; import java.util.concurrent.ExecutorService; /** * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @version $Revision: 1 $ */ public class HttpConnector { protected SSLContext sslContext; protected int port = -1; protected UriRegistry<Object> registry; protected Acceptor acceptor; protected ServerSocketChannel channel; protected static final Logger logger = Logger.getLogger(HttpConnector.class); public SSLContext getSslContext() { return sslContext; } public void setSslContext(SSLContext sslContext) { this.sslContext = sslContext; } public UriRegistry<Object> getRegistry() { return registry; } public void setRegistry(UriRegistry<Object> registry) { this.registry = registry; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public long getAcceptCount() { return acceptor.getAcceptCount(); } public void clearMetrics() { acceptor.clearMetrics(); } public void start(Worker[] workers, ExecutorService acceptorExecutor, ExecutorService requestExecutor) throws Exception { ManagedChannelFactory factory = null; if (sslContext != null) { if (port == -1) port = 8443; factory = new SSLChannelFactory(sslContext, new HttpEventHandlerFactory(requestExecutor, registry)); } else { if (port == -1) port = 8080; factory = new ManagedChannelFactory(new HttpEventHandlerFactory(requestExecutor, registry)); } channel = ServerSocketChannel.open(); channel.configureBlocking(false); channel.socket().bind(new InetSocketAddress(port)); acceptor = new Acceptor(channel, factory, workers); acceptorExecutor.execute(acceptor); } public void shutdownAcceptor() throws Exception { if (acceptor != null) acceptor.shutdown(); } public void shutdownChannel() throws Exception { if (channel != null) channel.close(); } }