package core.framework.impl.web; import core.framework.api.util.StopWatch; import core.framework.impl.log.LogManager; import core.framework.impl.web.site.SiteManager; import io.undertow.Undertow; import io.undertow.UndertowOptions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author neo */ public class HTTPServer { static { // make undertow to use slf4j System.setProperty("org.jboss.logging.provider", "slf4j"); } public final SiteManager siteManager = new SiteManager(); public final HTTPServerHandler handler; private final Logger logger = LoggerFactory.getLogger(HTTPServer.class); public Integer httpPort; public Integer httpsPort; private Undertow server; public HTTPServer(LogManager logManager) { handler = new HTTPServerHandler(logManager, siteManager); } public void start() { if (httpPort == null && httpsPort == null) { httpPort = 8080; // by default start http } StopWatch watch = new StopWatch(); try { Undertow.Builder builder = Undertow.builder(); if (httpPort != null) builder.addHttpListener(httpPort, "0.0.0.0"); if (httpsPort != null) builder.addHttpsListener(httpsPort, "0.0.0.0", new SSLContextBuilder().build()); builder.setHandler(new HTTPServerIOHandler(handler)) .setServerOption(UndertowOptions.DECODE_URL, false); server = builder.build(); server.start(); } finally { logger.info("http server started, httpPort={}, httpsPort={}, elapsedTime={}", httpPort, httpsPort, watch.elapsedTime()); } } public void stop() { if (server != null) { logger.info("stop http server"); server.stop(); } } }