import io.undertow.Undertow; import io.undertow.server.HttpHandler; import io.undertow.server.HttpServerExchange; import io.undertow.util.Headers; import tcp.CuisineTCPServer; import websockets.CuisineWebSocketServer; import java.util.Scanner; import static io.undertow.Handlers.*; public class CuisineHTTPServer extends Thread { static int webPagePort = 8080; static int webSocketPort = 42069; static String webSocketHost = "192.168.0.24"; static String webSocketProcolPrefix = "wss"; static boolean writePortInClientSideURI = false; static int tcpSocketPort = 6868; static String HOST = "0.0.0.0" ; private static CuisineTCPServer fCuisineTCPServer; public void startServer(String iHostName, int iWebPagePort, int iWebSocketPort, boolean iWebSocketUriClPortDisplay, String iWebSocketProtocolPrefix, int iTcpSocketPort) { webSocketHost = iHostName; webPagePort = iWebPagePort; webSocketPort = iWebSocketPort; tcpSocketPort = iTcpSocketPort; webSocketProcolPrefix = iWebSocketProtocolPrefix; writePortInClientSideURI = iWebSocketUriClPortDisplay; initResources(); //Create CuisineTCPServer fCuisineTCPServer = new CuisineTCPServer(tcpSocketPort); //Start HTTP Server : serve webpage with JS that calls the websocket Undertow WebPageServer = Undertow.builder() .addHttpListener(webPagePort, HOST) .setHandler( new CuisineResponseHandler(iWebSocketProtocolPrefix+"://"+webSocketHost+":"+( writePortInClientSideURI ? webSocketPort : "" )) ).build(); WebPageServer.start(); System.out.println("WebPageServer started"); CuisineWebSocketServer vWebSocketServer = new CuisineWebSocketServer(webSocketHost,webSocketPort); vWebSocketServer.initTCPServer(fCuisineTCPServer); //Start websocket vWebSocketServer.start(); System.out.println("WebSocketServer started"); } static String sHtml_ASCII_title; static String sHtml_CSS; static String sJS_ClientSide; static String sHtml_Chatbox; static String sJS_Chatbox; static void initResources() { try { sHtml_ASCII_title = new Scanner(CuisineHTTPServer.class.getResourceAsStream("html_ascii_title"), "UTF-8").useDelimiter("\\A").next(); sHtml_CSS = new Scanner(CuisineHTTPServer.class.getResourceAsStream("style.css"), "UTF-8").useDelimiter("\\A").next(); sJS_ClientSide = new Scanner(CuisineHTTPServer.class.getResourceAsStream("clientsidecoms.js"), "UTF-8").useDelimiter("\\A").next(); sHtml_Chatbox = new Scanner(CuisineHTTPServer.class.getResourceAsStream("components/chat.html"), "UTF-8").useDelimiter("\\A").next(); sJS_Chatbox = new Scanner(CuisineHTTPServer.class.getResourceAsStream("components/chatscript.js"), "UTF-8").useDelimiter("\\A").next(); } catch(Exception vex) { vex.printStackTrace(); sHtml_ASCII_title = "Galère les resources"; } } private class CuisineResponseHandler implements HttpHandler { private String fWebSocketConnectionUri; public CuisineResponseHandler(String iWebSocketConnectionUri) { super(); fWebSocketConnectionUri = iWebSocketConnectionUri; } @Override public void handleRequest(HttpServerExchange exchange) throws Exception { //Serve webpage exchange.getResponseHeaders() .put(Headers.CONTENT_TYPE, "text/html") .put(Headers.CONTENT_ENCODING,"utf-8"); exchange.getResponseSender().send(getHTMLFrontPage(fWebSocketConnectionUri)); } } static String getHTMLFrontPage(String iWsUri) { StringBuilder vBuilder = new StringBuilder(); vBuilder .append("") .append(" ") .append(" ") .append("") .append("") .append("
") .append(sHtml_ASCII_title) .append("
") .append("

None

") .append(sHtml_Chatbox.replace("%WSURI%",iWsUri)) .append(" ") .append("") .append("") ; return vBuilder.toString(); } }