|
@@ -1,89 +1,54 @@
|
|
|
package com.acdp.transceivr;
|
|
|
|
|
|
-import java.net.http.HttpClient;
|
|
|
-import java.nio.charset.StandardCharsets;
|
|
|
-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.BlockingHandler;
|
|
|
-import io.undertow.server.handlers.form.EagerFormParsingHandler;
|
|
|
-import io.undertow.server.handlers.form.FormDataParser;
|
|
|
-import io.undertow.server.handlers.resource.ClassPathResourceManager;
|
|
|
-import io.undertow.server.handlers.resource.PathResourceManager;
|
|
|
-import io.undertow.util.Headers;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
-import static io.undertow.Handlers.resource;
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
+
|
|
|
+import static spark.Spark.*;
|
|
|
+
|
|
|
|
|
|
public class WebServer {
|
|
|
private final static org.slf4j.Logger logger = LoggerFactory.getLogger(WebServer.class);
|
|
|
private final int port;
|
|
|
- private Undertow server;
|
|
|
- private int nextID=1;
|
|
|
- private ConcurrentHashMap<Integer, Transfer> uploads=new ConcurrentHashMap();
|
|
|
+ private int nextID = 1;
|
|
|
+ private ConcurrentHashMap<Integer, Transfer> uploads = new ConcurrentHashMap<>();
|
|
|
|
|
|
public WebServer(int port, boolean debug) {
|
|
|
this.port = port;
|
|
|
}
|
|
|
|
|
|
public void start() {
|
|
|
- Undertow.Builder builder = Undertow.builder();
|
|
|
- builder.addHttpListener(port, "0.0.0.0");
|
|
|
- builder.setHandler(Handlers.routing()
|
|
|
- .post("/xfer", new BlockingHandler(new EagerFormParsingHandler(ex -> {
|
|
|
- // var qParams=ex.getQueryParameters();
|
|
|
- var pParams=ex.getAttachment(FormDataParser.FORM_DATA);
|
|
|
- Transfer t=new Transfer(nextID++);
|
|
|
- t.from=pParams.getFirst("from").getValue();
|
|
|
- t.to=pParams.getFirst("to").getValue();
|
|
|
- LoadTools.startTransfer(t);
|
|
|
- uploads.put(t.id, t);
|
|
|
- ex.getResponseSender().send("OK: "+t.id);
|
|
|
- })))
|
|
|
- .get("/zero",new HttpHandler() {
|
|
|
- @Override
|
|
|
- public void handleRequest(HttpServerExchange ex) throws Exception {
|
|
|
- if(!dispatch(ex,this)) return;
|
|
|
- ex.startBlocking();
|
|
|
- var ba=new byte[1024];
|
|
|
- while(true)
|
|
|
- ex.getOutputStream().write(ba);
|
|
|
- }
|
|
|
- })
|
|
|
- .post("/null",new BlockingHandler (ex -> {
|
|
|
- var ba=new byte[1024];
|
|
|
- while(true) {
|
|
|
- ex.getInputStream().read(ba);
|
|
|
- }
|
|
|
- }))
|
|
|
- .get("/status", ex -> {
|
|
|
- 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 ClassPathResourceManager(getClass().getClassLoader(),"webroot" ))
|
|
|
- .setDirectoryListingEnabled(true))
|
|
|
- // .get("/*", resource(new PathResourceManager(Paths.get("webroot"), 100))
|
|
|
- // .setDirectoryListingEnabled(true))
|
|
|
- );
|
|
|
- server = builder.build();
|
|
|
- server.start();
|
|
|
+ port(port);
|
|
|
+ staticFiles.location("/webroot");
|
|
|
+ get("/hello", (req, res) -> "Hello World");
|
|
|
+ get("/zero", (req, res) -> {
|
|
|
+ var os = res.raw().getOutputStream();
|
|
|
+ var ba = new byte[1024];
|
|
|
+ while (true)
|
|
|
+ os.write(ba);
|
|
|
+ });
|
|
|
+ post("/null", (req, res) -> {
|
|
|
+ var is = req.raw().getInputStream();
|
|
|
+ var ba = new byte[1024];
|
|
|
+ while (true)
|
|
|
+ is.read(ba);
|
|
|
+ });
|
|
|
+ get("/status", (req, res) -> {
|
|
|
+ JsonArray ja = new JsonArray();
|
|
|
+ for (Transfer t : uploads.values())
|
|
|
+ ja.add(t.toJSON());
|
|
|
+ res.header("Content-Type", "application/json");
|
|
|
+ return ja.toString();
|
|
|
+ });
|
|
|
+ post("/xfer", (req, res) -> {
|
|
|
+ Transfer t = new Transfer(nextID++);
|
|
|
+ t.from = req.queryParams("from");
|
|
|
+ t.to = req.queryParams("to");
|
|
|
+ LoadTools.startTransfer(t);
|
|
|
+ uploads.put(t.id, t);
|
|
|
+ return "OK: " + t.id;
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
- private boolean dispatch(HttpServerExchange ex, HttpHandler handler) {
|
|
|
- if (ex.isInIoThread()) {
|
|
|
- ex.dispatch(handler);
|
|
|
- return false;
|
|
|
- }
|
|
|
- ex.startBlocking();
|
|
|
- return true;
|
|
|
- }
|
|
|
}
|