Server HTTP + WebSocket + Serveur TCP pour transmettre la température du thermometre dans ma cuisine
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

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. }