1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- 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;
- 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();
- 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();
- }
- private boolean dispatch(HttpServerExchange ex, HttpHandler handler) {
- if (ex.isInIoThread()) {
- ex.dispatch(handler);
- return false;
- }
- ex.startBlocking();
- return true;
- }
- }
|