import io.undertow.Undertow; import io.undertow.server.HttpHandler; import io.undertow.server.HttpServerExchange; import io.undertow.util.Headers; import io.undertow.websockets.WebSocketConnectionCallback; import io.undertow.websockets.core.AbstractReceiveListener; import io.undertow.websockets.core.BufferedTextMessage; import io.undertow.websockets.core.WebSocketChannel; import io.undertow.websockets.core.WebSockets; import io.undertow.websockets.spi.WebSocketHttpExchange; import static io.undertow.Handlers.*; public class CuisineHTTPServer extends Thread { final int webPagePort = 8080; final int webSocketPort = 42069; final String HOST = "localhost" ; public void startServer() { //Create CuisineTCPServers CuisineTCPServer vTCPServer = new CuisineTCPServer(); CuisineWebSocketMessageHandler vWebSocketMessageHandler = new CuisineWebSocketMessageHandler( vTCPServer ); CuisineWebSocketConnectionHandler vWebSocketConnectionHandler = new CuisineWebSocketConnectionHandler( vWebSocketMessageHandler ); //Start HTTP Server : serve webpage with JS that calls the websocket Undertow WebPageServer = Undertow.builder() .addHttpListener(webPagePort, HOST) .setHandler( new CuisineResponseHandler() ).build(); WebPageServer.start(); System.out.println("WebPageServer started"); //Start websocket Undertow WebSocketServer = Undertow.builder() .addHttpListener(webSocketPort, HOST) .setHandler( path() .addPrefixPath("/data",websocket(vWebSocketConnectionHandler)) ) .build(); WebSocketServer.start(); System.out.println("WebSocketServer started"); } private class CuisineResponseHandler implements HttpHandler { @Override public void handleRequest(HttpServerExchange exchange) throws Exception { //Serve webpage exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain"); exchange.getResponseSender().send("Salut, gropd!"); } } private class CuisineWebSocketConnectionHandler implements WebSocketConnectionCallback { private CuisineWebSocketMessageHandler fWebSocketMessageHandler; protected CuisineWebSocketConnectionHandler(CuisineWebSocketMessageHandler iWebSocketMessageHandler) { fWebSocketMessageHandler = iWebSocketMessageHandler; } @Override public void onConnect(WebSocketHttpExchange exchange, WebSocketChannel channel) { channel.getReceiveSetter().set(fWebSocketMessageHandler); channel.resumeReceives(); } } private class CuisineWebSocketMessageHandler extends AbstractReceiveListener { private CuisineTCPServer fTCPServer; protected CuisineWebSocketMessageHandler( CuisineTCPServer iTCPServer) { fTCPServer = iTCPServer; } protected void onFullTextMessage(WebSocketChannel iChannel, BufferedTextMessage iTextMessage) { //Handle message on webSocket WebSockets.sendText(String.valueOf(fTCPServer.getCurrentTemperature()), iChannel, null); } } }