WebServer.java 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package at.acdp.urweb.web;
  2. import java.nio.file.Paths;
  3. import at.acdp.urweb.ScReadThread;
  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.resource.PathResourceManager;
  10. import org.slf4j.LoggerFactory;
  11. import static io.undertow.Handlers.resource;
  12. public class WebServer {
  13. private final static org.slf4j.Logger logger = LoggerFactory.getLogger(WebServer.class);
  14. private final int port;
  15. private final ScReadThread sc;
  16. private Undertow server;
  17. public WebServer(int port, boolean debug, ScReadThread sc) {
  18. this.sc = sc;
  19. this.port = port;
  20. }
  21. public void start() {
  22. Undertow.Builder builder = Undertow.builder();
  23. builder.addHttpListener(port, "0.0.0.0");
  24. builder.setHandler(Handlers.routing()
  25. .post("/cmd", new HttpHandler() {
  26. @Override
  27. public void handleRequest(HttpServerExchange ex) throws Exception {
  28. if (ex.isInIoThread()) {
  29. ex.dispatch(this);
  30. return;
  31. }
  32. ex.startBlocking();
  33. byte[] bytes = ex.getInputStream().readAllBytes();
  34. String cmd=new String(bytes);
  35. String[] lines=cmd.split("[\\r\\n]+");
  36. String res="";
  37. for(String line:lines) {
  38. line=line.trim();
  39. if(line.startsWith("//"))
  40. continue;
  41. if(line.startsWith("#"))
  42. continue;
  43. if(!line.endsWith("\n"))
  44. line+="\n";
  45. res+=line;
  46. }
  47. if(!cmd.endsWith("\n"))
  48. cmd+="\n";
  49. sc.writeCmd(cmd);
  50. }
  51. })
  52. .get("/log/{from}", ex -> {
  53. var x=ex.getQueryParameters().get("from").getFirst();
  54. int from= Integer.parseInt(ex.getQueryParameters().get("from").getFirst());
  55. from=Integer.max(0,from);
  56. var r = URLog.get(from);
  57. ex.getResponseSender().send(r.toJSON().toString());
  58. })
  59. .get("/test/{id}", ex -> {
  60. System.out.println(ex.getQueryParameters().get("id").getFirst());
  61. })
  62. .get("/*", resource(new PathResourceManager(Paths.get("webroot"), 100))
  63. .setDirectoryListingEnabled(true))
  64. );
  65. server = builder.build();
  66. server.start();
  67. }
  68. }