package at.acdp.urweb.web; import java.nio.file.Paths; import at.acdp.urweb.ScReadThread; 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 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 final ScReadThread sc; private Undertow server; public WebServer(int port, boolean debug, ScReadThread sc) { this.sc = sc; this.port = port; } public void start() { Undertow.Builder builder = Undertow.builder(); builder.addHttpListener(port, "0.0.0.0"); builder.setHandler(Handlers.routing() .post("/cmd", new HttpHandler() { @Override public void handleRequest(HttpServerExchange ex) throws Exception { if (ex.isInIoThread()) { ex.dispatch(this); return; } ex.startBlocking(); byte[] bytes = ex.getInputStream().readAllBytes(); String cmd=new String(bytes); String[] lines=cmd.split("[\\r\\n]+"); String res=""; for(String line:lines) { line=line.trim(); if(line.startsWith("//")) continue; if(line.startsWith("#")) continue; if(!line.endsWith("\n")) line+="\n"; res+=line; } if(!cmd.endsWith("\n")) cmd+="\n"; sc.writeCmd(cmd); } }) .get("/log", ex -> { //ex.getOutputStream(). // System.out.println(ex.getQueryParameters().get("id").getFirst()); }) .get("/test/{id}", ex -> { System.out.println(ex.getQueryParameters().get("id").getFirst()); }) .get("/*", resource(new PathResourceManager(Paths.get("webroot"), 100)) .setDirectoryListingEnabled(true)) ); server = builder.build(); server.start(); } }