12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package at.acdp.urweb.web;
- import java.nio.file.Paths;
- import at.acdp.urweb.URBot;
- import at.acdp.urweb.sclient.URLog;
- import io.undertow.Handlers;
- import io.undertow.Undertow;
- import io.undertow.server.HttpHandler;
- import io.undertow.server.HttpServerExchange;
- import io.undertow.server.handlers.HttpTraceHandler;
- 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 URBot urbot;
- private Undertow server;
- public WebServer(int port, boolean debug, URBot urbot) {
- this.urbot = urbot;
- 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(!dispatch(ex,this)) return;
- byte[] bytes = ex.getInputStream().readAllBytes();
- String cmd=new String(bytes);
- urbot.sendProgram(cmd);
- }
- })
- .post("/freedrive", new HttpHandler() {
- @Override
- public void handleRequest(HttpServerExchange ex) throws Exception {
- dispatch(ex, this);
- urbot.sendFreedrive(1);
- }
- })
- .post("/digital/{which}", new HttpHandler() {
- @Override
- public void handleRequest(HttpServerExchange ex) throws Exception {
- if(!dispatch(ex,this)) return;
- int which= Integer.parseInt(ex.getQueryParameters().get("which").getFirst());
- boolean val = Boolean.valueOf(new String(ex.getInputStream().readAllBytes()));
- urbot.setDigital(which, val);
- }
- })
- .get("/digital/{which}", new HttpHandler() {
- @Override
- public void handleRequest(HttpServerExchange ex) throws Exception {
- if(!dispatch(ex,this)) return;
- int which= Integer.parseInt(ex.getQueryParameters().get("which").getFirst());
- boolean res=urbot.getDigital(which);
- ex.getResponseSender().send(String.valueOf(res));
- }
- })
- .get("/log/{from}", ex -> {
- var x=ex.getQueryParameters().get("from").getFirst();
- int from= Integer.parseInt(ex.getQueryParameters().get("from").getFirst());
- from=Integer.max(0,from);
- var r = URLog.get(from);
- ex.getResponseSender().send(r.toJSON().toString());
- })
- .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();
- }
- private boolean dispatch(HttpServerExchange ex, HttpHandler handler) {
- if (ex.isInIoThread()) {
- ex.dispatch(handler);
- return false;
- }
- ex.startBlocking();
- return true;
- }
- }
|