Server HTTP + WebSocket + Serveur TCP pour transmettre la température du thermometre dans ma cuisine
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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