package logbook.server.proxy; import logbook.config.AppConfig; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletHandler; /** * プロキシサーバーです * */ public final class ProxyServer extends Thread { private static final Logger LOG = LogManager.getLogger(ProxyServer.class); private static ProxyServer proxyServer; private final int port; private Server server; private ProxyServer(int port) { this.port = port; this.setName("logbook_proxy_server"); } @Override public void run() { try { this.server = new Server(this.port); ServletHandler servletHandler = new ServletHandler(); servletHandler.addServletWithMapping(ReverseProxyServlet.class, "/*"); servletHandler.setServer(this.server); this.server.setHandler(servletHandler); this.server.start(); this.server.join(); } catch (Exception e) { LOG.fatal("サーバーの起動に失敗しました", e); throw new RuntimeException(e); } } private void shutdown() { try { this.server.stop(); } catch (Exception e) { e.printStackTrace(); } } public static ProxyServer getInstance() { if (proxyServer == null) { proxyServer = new ProxyServer(AppConfig.get().getListenPort()); } return proxyServer; } public static void end() { proxyServer.shutdown(); } }