/** * */ package org.minnal.core.server; import io.netty.util.internal.logging.InternalLoggerFactory; import io.netty.util.internal.logging.Slf4JLoggerFactory; import java.util.ArrayList; import java.util.List; import org.minnal.core.Bundle; import org.minnal.core.Container; import org.minnal.core.Router; import org.minnal.core.config.ConnectorConfiguration; import org.minnal.core.config.ConnectorConfiguration.Scheme; import org.minnal.core.config.ServerConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * A simple http server over netty that delegates all the incoming requests to {@link Router} * * @author ganeshs * */ public class Server implements Bundle<ServerBundleConfiguration> { private List<AbstractHttpConnector> connectors = new ArrayList<AbstractHttpConnector>(); private static final Logger logger = LoggerFactory.getLogger(Server.class); public void init(Container container, ServerBundleConfiguration config) { logger.info("Initializing the container"); // Override the supplied one ServerConfiguration configuration = container.getConfiguration().getServerConfiguration(); AbstractHttpConnector connector = null; InternalLoggerFactory.setDefaultFactory(new Slf4JLoggerFactory()); logger.info("Loading the http connectors"); for (ConnectorConfiguration connectorConfig : configuration.getConnectorConfigurations()) { if (connectorConfig.getScheme() == Scheme.https) { connector = createHttpsConnector(connectorConfig, container.getRouter()); } else { connector = createHttpConnector(connectorConfig, container.getRouter()); } connector.registerListener(container.getMessageObserver()); connector.initialize(); connectors.add(connector); } } public void start() { logger.info("Starting the connectors"); for (AbstractHttpConnector connector : connectors) { connector.start(); } } public void stop() { logger.info("Stopping the connectors"); for (AbstractHttpConnector connector : connectors) { connector.stop(); } } @Override public int getOrder() { return Integer.MAX_VALUE; } protected HttpConnector createHttpConnector(ConnectorConfiguration connectorConfig, Router router) { return new HttpConnector(connectorConfig, router); } protected HttpsConnector createHttpsConnector(ConnectorConfiguration connectorConfig, Router router) { return new HttpsConnector(connectorConfig, router); } }