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 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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 tcp.CuisineTCPServer;
  6. import websockets.CuisineWebSocketServer;
  7. import java.util.Scanner;
  8. import static io.undertow.Handlers.*;
  9. public class CuisineHTTPServer extends Thread
  10. {
  11. static int webPagePort = 8080;
  12. static int webSocketPort = 42069;
  13. static String webSocketHost = "192.168.0.24";
  14. static String webSocketProcolPrefix = "wss";
  15. static boolean writePortInClientSideURI = false;
  16. static int tcpSocketPort = 6868;
  17. static String HOST = "0.0.0.0" ;
  18. private static CuisineTCPServer fCuisineTCPServer;
  19. public void startServer(String iHostName, int iWebPagePort, int iWebSocketPort, boolean iWebSocketUriClPortDisplay, String iWebSocketProtocolPrefix, int iTcpSocketPort)
  20. {
  21. webSocketHost = iHostName;
  22. webPagePort = iWebPagePort;
  23. webSocketPort = iWebSocketPort;
  24. tcpSocketPort = iTcpSocketPort;
  25. webSocketProcolPrefix = iWebSocketProtocolPrefix;
  26. writePortInClientSideURI = iWebSocketUriClPortDisplay;
  27. initResources();
  28. //Create CuisineTCPServer
  29. fCuisineTCPServer = new CuisineTCPServer(tcpSocketPort);
  30. //Start HTTP Server : serve webpage with JS that calls the websocket
  31. Undertow WebPageServer = Undertow.builder()
  32. .addHttpListener(webPagePort, HOST)
  33. .setHandler(
  34. new CuisineResponseHandler(iWebSocketProtocolPrefix+"://"+webSocketHost+":"+( writePortInClientSideURI ? webSocketPort : "" ))
  35. ).build();
  36. WebPageServer.start();
  37. System.out.println("WebPageServer started");
  38. CuisineWebSocketServer vWebSocketServer = new CuisineWebSocketServer(webSocketHost,webSocketPort);
  39. vWebSocketServer.initTCPServer(fCuisineTCPServer);
  40. //Start websocket
  41. vWebSocketServer.start();
  42. System.out.println("WebSocketServer started");
  43. }
  44. static String sHtml_ASCII_title;
  45. static String sHtml_CSS;
  46. static String sJS_ClientSide;
  47. static String sHtml_Chatbox;
  48. static String sJS_Chatbox;
  49. static void initResources()
  50. {
  51. try {
  52. sHtml_ASCII_title = new Scanner(CuisineHTTPServer.class.getResourceAsStream("html_ascii_title"), "UTF-8").useDelimiter("\\A").next();
  53. sHtml_CSS = new Scanner(CuisineHTTPServer.class.getResourceAsStream("style.css"), "UTF-8").useDelimiter("\\A").next();
  54. sJS_ClientSide = new Scanner(CuisineHTTPServer.class.getResourceAsStream("clientsidecoms.js"), "UTF-8").useDelimiter("\\A").next();
  55. sHtml_Chatbox = new Scanner(CuisineHTTPServer.class.getResourceAsStream("components/chat.html"), "UTF-8").useDelimiter("\\A").next();
  56. sJS_Chatbox = new Scanner(CuisineHTTPServer.class.getResourceAsStream("components/chatscript.js"), "UTF-8").useDelimiter("\\A").next();
  57. }
  58. catch(Exception vex)
  59. {
  60. vex.printStackTrace();
  61. sHtml_ASCII_title = "Galère les resources";
  62. }
  63. }
  64. private class CuisineResponseHandler implements HttpHandler
  65. {
  66. private String fWebSocketConnectionUri;
  67. public CuisineResponseHandler(String iWebSocketConnectionUri)
  68. {
  69. super();
  70. fWebSocketConnectionUri = iWebSocketConnectionUri;
  71. }
  72. @Override
  73. public void handleRequest(HttpServerExchange exchange) throws Exception {
  74. //Serve webpage
  75. exchange.getResponseHeaders()
  76. .put(Headers.CONTENT_TYPE, "text/html")
  77. .put(Headers.CONTENT_ENCODING,"utf-8");
  78. exchange.getResponseSender().send(getHTMLFrontPage(fWebSocketConnectionUri));
  79. }
  80. }
  81. static String getHTMLFrontPage(String iWsUri)
  82. {
  83. StringBuilder vBuilder = new StringBuilder();
  84. vBuilder
  85. .append("<head>")
  86. .append(" <meta charset=\"UTF-8\">")
  87. .append(" <style>")
  88. .append(sHtml_CSS)
  89. .append(" </style>")
  90. .append("</head>")
  91. .append("<body>")
  92. .append(" <div class=\"centered\">")
  93. .append(sHtml_ASCII_title)
  94. .append(" </div>")
  95. .append(" <h1 id=\"tempValue\">None</h1>")
  96. .append(sHtml_Chatbox.replace("%WSURI%",iWsUri))
  97. .append(" <script>")
  98. .append(sJS_ClientSide.replace("%WSURI%",iWsUri))
  99. .append(sJS_Chatbox.replace("%WSURI%",iWsUri))
  100. .append(" </script>")
  101. .append("</body>")
  102. .append("")
  103. ;
  104. return vBuilder.toString();
  105. }
  106. }