Server HTTP + WebSocket + Serveur TCP pour transmettre la température du thermometre dans ma cuisine
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

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