123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package com.acdp.transceivr;
- import java.net.http.HttpClient;
- import java.nio.file.Paths;
- import java.util.concurrent.ConcurrentHashMap;
- import com.eclipsesource.json.Json;
- import com.eclipsesource.json.JsonArray;
- import com.eclipsesource.json.JsonObject;
- import io.undertow.Handlers;
- import io.undertow.Undertow;
- import io.undertow.server.HttpHandler;
- import io.undertow.server.HttpServerExchange;
- import io.undertow.server.handlers.resource.PathResourceManager;
- import io.undertow.util.Headers;
- import org.slf4j.LoggerFactory;
- import static io.undertow.Handlers.resource;
- public class WebServer {
- private final static org.slf4j.Logger logger = LoggerFactory.getLogger(WebServer.class);
- private final int port;
- private Undertow server;
- private HttpClient client;
- private int nextID=1;
- private ConcurrentHashMap<Integer, Transfer> uploads=new ConcurrentHashMap();
- public WebServer(int port, boolean debug) {
- this.port = port;
- client= HttpClient.newBuilder()
- .followRedirects(HttpClient.Redirect.NORMAL)
- .build();
- }
- public void start() {
- Undertow.Builder builder = Undertow.builder();
- builder.addHttpListener(port, "0.0.0.0");
- builder.setHandler(Handlers.routing()
- .post("/xfer", new HttpHandler() {
- @Override
- public void handleRequest(HttpServerExchange ex) throws Exception {
- if(!dispatch(ex,this)) return;
- JsonObject value = Json.parse(new String(ex.getInputStream().readAllBytes())).asObject();
- Transfer t=new Transfer(nextID++);
- t.from=value.get("from").asString();
- t.to=value.get("to").asString();
- LoadTools.startTransfer(t);
- uploads.put(t.id, t);
- ex.getResponseSender().send("OK: "+t.id);
- }
- })
- .get("/status", new HttpHandler() {
- @Override
- public void handleRequest(HttpServerExchange ex) throws Exception {
- if (!dispatch(ex, this)) return;
- JsonArray ja=new JsonArray();
- for(Transfer t:uploads.values()) {
- ja.add(t.toJSON());
- }
- ex.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/json");
- ex.getResponseSender().send(ja.toString());
- }})
- .get("/*", resource(new PathResourceManager(Paths.get("webroot"), 100))
- .setDirectoryListingEnabled(true))
- );
- server = builder.build();
- server.start();
- }
- private boolean dispatch(HttpServerExchange ex, HttpHandler handler) {
- if (ex.isInIoThread()) {
- ex.dispatch(handler);
- return false;
- }
- ex.startBlocking();
- return true;
- }
- }
|