Server HTTP + WebSocket + Serveur TCP pour transmettre la température du thermometre dans ma cuisine
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

CuisineHTTPServer.java 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import io.undertow.Undertow;
  2. import io.undertow.server.HttpHandler;
  3. import io.undertow.server.HttpServerExchange;
  4. import io.undertow.util.Headers;
  5. import io.undertow.websockets.WebSocketConnectionCallback;
  6. import io.undertow.websockets.core.AbstractReceiveListener;
  7. import io.undertow.websockets.core.BufferedTextMessage;
  8. import io.undertow.websockets.core.WebSocketChannel;
  9. import io.undertow.websockets.core.WebSockets;
  10. import io.undertow.websockets.spi.WebSocketHttpExchange;
  11. import static io.undertow.Handlers.*;
  12. public class CuisineHTTPServer extends Thread
  13. {
  14. final int webPagePort = 8080;
  15. final int webSocketPort = 42069;
  16. final String HOST = "localhost" ;
  17. public void startServer()
  18. {
  19. //Create CuisineTCPServers
  20. CuisineTCPServer vTCPServer = new CuisineTCPServer();
  21. CuisineWebSocketMessageHandler vWebSocketMessageHandler = new CuisineWebSocketMessageHandler( vTCPServer );
  22. CuisineWebSocketConnectionHandler vWebSocketConnectionHandler = new CuisineWebSocketConnectionHandler( vWebSocketMessageHandler );
  23. //Start HTTP Server : serve webpage with JS that calls the websocket
  24. Undertow WebPageServer = Undertow.builder()
  25. .addHttpListener(webPagePort, HOST)
  26. .setHandler(
  27. new CuisineResponseHandler()
  28. ).build();
  29. WebPageServer.start();
  30. System.out.println("WebPageServer started");
  31. //Start websocket
  32. Undertow WebSocketServer = Undertow.builder()
  33. .addHttpListener(webSocketPort, HOST)
  34. .setHandler(
  35. path()
  36. .addPrefixPath("/data",websocket(vWebSocketConnectionHandler))
  37. )
  38. .build();
  39. WebSocketServer.start();
  40. System.out.println("WebSocketServer started");
  41. }
  42. private class CuisineResponseHandler implements HttpHandler
  43. {
  44. @Override
  45. public void handleRequest(HttpServerExchange exchange) throws Exception {
  46. //Serve webpage
  47. exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
  48. exchange.getResponseSender().send("Salut, gropd!");
  49. }
  50. }
  51. private class CuisineWebSocketConnectionHandler implements WebSocketConnectionCallback
  52. {
  53. private CuisineWebSocketMessageHandler fWebSocketMessageHandler;
  54. protected CuisineWebSocketConnectionHandler(CuisineWebSocketMessageHandler iWebSocketMessageHandler)
  55. {
  56. fWebSocketMessageHandler = iWebSocketMessageHandler;
  57. }
  58. @Override
  59. public void onConnect(WebSocketHttpExchange exchange, WebSocketChannel channel) {
  60. channel.getReceiveSetter().set(fWebSocketMessageHandler);
  61. channel.resumeReceives();
  62. }
  63. }
  64. private class CuisineWebSocketMessageHandler extends AbstractReceiveListener {
  65. private CuisineTCPServer fTCPServer;
  66. protected CuisineWebSocketMessageHandler( CuisineTCPServer iTCPServer)
  67. {
  68. fTCPServer = iTCPServer;
  69. }
  70. protected void onFullTextMessage(WebSocketChannel iChannel, BufferedTextMessage iTextMessage)
  71. {
  72. //Handle message on webSocket
  73. WebSockets.sendText(String.valueOf(fTCPServer.getCurrentTemperature()), iChannel, null);
  74. }
  75. }
  76. }