WebServer.java 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package com.acdp.transceivr;
  2. import java.net.http.HttpClient;
  3. import java.nio.file.Paths;
  4. import java.util.concurrent.ConcurrentHashMap;
  5. import com.eclipsesource.json.Json;
  6. import com.eclipsesource.json.JsonArray;
  7. import com.eclipsesource.json.JsonObject;
  8. import io.undertow.Handlers;
  9. import io.undertow.Undertow;
  10. import io.undertow.server.HttpHandler;
  11. import io.undertow.server.HttpServerExchange;
  12. import io.undertow.server.handlers.resource.PathResourceManager;
  13. import io.undertow.util.Headers;
  14. import org.slf4j.LoggerFactory;
  15. import static io.undertow.Handlers.resource;
  16. public class WebServer {
  17. private final static org.slf4j.Logger logger = LoggerFactory.getLogger(WebServer.class);
  18. private final int port;
  19. private Undertow server;
  20. private HttpClient client;
  21. private int nextID=1;
  22. private ConcurrentHashMap<Integer, Transfer> uploads=new ConcurrentHashMap();
  23. public WebServer(int port, boolean debug) {
  24. this.port = port;
  25. client= HttpClient.newBuilder()
  26. .followRedirects(HttpClient.Redirect.NORMAL)
  27. .build();
  28. }
  29. public void start() {
  30. Undertow.Builder builder = Undertow.builder();
  31. builder.addHttpListener(port, "0.0.0.0");
  32. builder.setHandler(Handlers.routing()
  33. .post("/xfer", new HttpHandler() {
  34. @Override
  35. public void handleRequest(HttpServerExchange ex) throws Exception {
  36. if(!dispatch(ex,this)) return;
  37. JsonObject value = Json.parse(new String(ex.getInputStream().readAllBytes())).asObject();
  38. Transfer t=new Transfer(nextID++);
  39. t.from=value.get("from").asString();
  40. t.to=value.get("to").asString();
  41. LoadTools.startTransfer(t);
  42. uploads.put(t.id, t);
  43. ex.getResponseSender().send("OK: "+t.id);
  44. }
  45. })
  46. .get("/status", new HttpHandler() {
  47. @Override
  48. public void handleRequest(HttpServerExchange ex) throws Exception {
  49. if (!dispatch(ex, this)) return;
  50. JsonArray ja=new JsonArray();
  51. for(Transfer t:uploads.values()) {
  52. ja.add(t.toJSON());
  53. }
  54. ex.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/json");
  55. ex.getResponseSender().send(ja.toString());
  56. }})
  57. .get("/*", resource(new PathResourceManager(Paths.get("webroot"), 100))
  58. .setDirectoryListingEnabled(true))
  59. );
  60. server = builder.build();
  61. server.start();
  62. }
  63. private boolean dispatch(HttpServerExchange ex, HttpHandler handler) {
  64. if (ex.isInIoThread()) {
  65. ex.dispatch(handler);
  66. return false;
  67. }
  68. ex.startBlocking();
  69. return true;
  70. }
  71. }