WebServer.java 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package com.acdp.transceivr;
  2. import com.eclipsesource.json.JsonArray;
  3. import org.slf4j.LoggerFactory;
  4. import java.util.concurrent.ConcurrentHashMap;
  5. import static spark.Spark.*;
  6. public class WebServer {
  7. private final static org.slf4j.Logger logger = LoggerFactory.getLogger(WebServer.class);
  8. private final int port;
  9. private int nextID = 1;
  10. private ConcurrentHashMap<Integer, Transfer> uploads = new ConcurrentHashMap<>();
  11. public WebServer(int port) {
  12. this.port = port;
  13. }
  14. public void start() {
  15. port(port);
  16. staticFiles.location("/webroot");
  17. get("/zero", (req, res) -> {
  18. var os = res.raw().getOutputStream();
  19. var ba = new byte[1024];
  20. while (true)
  21. os.write(ba);
  22. });
  23. post("/null", (req, res) -> {
  24. var is = req.raw().getInputStream();
  25. var ba = new byte[1024];
  26. while (true)
  27. is.read(ba);
  28. });
  29. post("/cancel", (req, res) -> {
  30. int id = Integer.parseInt(req.queryParams("id"));
  31. var t=uploads.get(id);
  32. t.canceled=true;
  33. t.call.cancel();
  34. return "OK";
  35. });
  36. get("/status", (req, res) -> {
  37. JsonArray ja = new JsonArray();
  38. for (Transfer t : uploads.values())
  39. ja.add(t.toJSON());
  40. res.header("Content-Type", "application/json");
  41. return ja.toString();
  42. });
  43. post("/xfer", (req, res) -> {
  44. try {
  45. Transfer t = new Transfer(nextID++);
  46. t.from = req.queryParams("from");
  47. t.to = req.queryParams("to");
  48. LoadTools.startTransfer(t);
  49. uploads.put(t.id, t);
  50. return "OK: " + t.id;
  51. }
  52. catch (Exception e) {
  53. return "FAILED: " + e.toString();
  54. }
  55. });
  56. }
  57. }