WebServer.java 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package at.acdp.urweb.web;
  2. import java.nio.file.Paths;
  3. import at.acdp.urweb.URBot;
  4. import at.acdp.urweb.sclient.URLog;
  5. import io.undertow.Handlers;
  6. import io.undertow.Undertow;
  7. import io.undertow.server.HttpHandler;
  8. import io.undertow.server.HttpServerExchange;
  9. import io.undertow.server.handlers.HttpTraceHandler;
  10. import io.undertow.server.handlers.resource.PathResourceManager;
  11. import org.slf4j.LoggerFactory;
  12. import static io.undertow.Handlers.resource;
  13. public class WebServer {
  14. private final static org.slf4j.Logger logger = LoggerFactory.getLogger(WebServer.class);
  15. private final int port;
  16. private final URBot urbot;
  17. private Undertow server;
  18. public WebServer(int port, boolean debug, URBot urbot) {
  19. this.urbot = urbot;
  20. this.port = port;
  21. }
  22. public void start() {
  23. Undertow.Builder builder = Undertow.builder();
  24. builder.addHttpListener(port, "0.0.0.0");
  25. builder.setHandler(Handlers.routing()
  26. .post("/cmd", new HttpHandler() {
  27. @Override
  28. public void handleRequest(HttpServerExchange ex) throws Exception {
  29. if(!dispatch(ex,this)) return;
  30. byte[] bytes = ex.getInputStream().readAllBytes();
  31. String cmd=new String(bytes);
  32. urbot.sendProgram(cmd);
  33. }
  34. })
  35. .post("/freedrive", new HttpHandler() {
  36. @Override
  37. public void handleRequest(HttpServerExchange ex) throws Exception {
  38. dispatch(ex, this);
  39. urbot.sendFreedrive(1);
  40. }
  41. })
  42. .post("/digital/{which}", new HttpHandler() {
  43. @Override
  44. public void handleRequest(HttpServerExchange ex) throws Exception {
  45. if(!dispatch(ex,this)) return;
  46. int which= Integer.parseInt(ex.getQueryParameters().get("which").getFirst());
  47. boolean val = Boolean.valueOf(new String(ex.getInputStream().readAllBytes()));
  48. urbot.setDigital(which, val);
  49. }
  50. })
  51. .get("/digital/{which}", new HttpHandler() {
  52. @Override
  53. public void handleRequest(HttpServerExchange ex) throws Exception {
  54. if(!dispatch(ex,this)) return;
  55. int which= Integer.parseInt(ex.getQueryParameters().get("which").getFirst());
  56. boolean res=urbot.getDigital(which);
  57. ex.getResponseSender().send(String.valueOf(res));
  58. }
  59. })
  60. .get("/log/{from}", ex -> {
  61. var x=ex.getQueryParameters().get("from").getFirst();
  62. int from= Integer.parseInt(ex.getQueryParameters().get("from").getFirst());
  63. from=Integer.max(0,from);
  64. var r = URLog.get(from);
  65. ex.getResponseSender().send(r.toJSON().toString());
  66. })
  67. .get("/test/{id}", ex -> {
  68. System.out.println(ex.getQueryParameters().get("id").getFirst());
  69. })
  70. .get("/*", resource(new PathResourceManager(Paths.get("webroot"), 100))
  71. .setDirectoryListingEnabled(true))
  72. );
  73. server = builder.build();
  74. server.start();
  75. }
  76. private boolean dispatch(HttpServerExchange ex, HttpHandler handler) {
  77. if (ex.isInIoThread()) {
  78. ex.dispatch(handler);
  79. return false;
  80. }
  81. ex.startBlocking();
  82. return true;
  83. }
  84. }