package at.acdp.urweb.web; import at.acdp.urweb.Params; import at.acdp.urweb.RobotCommand; import at.acdp.urweb.URBot; import at.acdp.urweb.sclient.URLog; import com.eclipsesource.json.JsonArray; import org.slf4j.LoggerFactory; import static spark.Spark.*; public class WebServer { private final static org.slf4j.Logger logger = LoggerFactory.getLogger(WebServer.class); private URBot urbot; private final Params params; public WebServer(Params params) { this.params = params; } public void start() { this.urbot=new URBot(params.robotIP, params.robotPort); this.urbot.start(); port(params.port); if (!params.webroot.isEmpty()) staticFileLocation(params.webroot); else staticFiles.location("/webroot"); post("/cmd", (req, res) -> { var cmd=req.queryParams("script"); RobotCommand rc=new RobotCommand(cmd); rc.cpeeCallback = req.headers("CPEE-CALLBACK"); rc.cpeeCallbackId = req.headers("CPEE-CALLBACK-ID"); rc.cpeeInstanceURL = req.headers("CPEE-INSTANCE-URL"); if (Boolean.valueOf(req.queryParams("callback"))) { res.header("CPEE-CALLBACK", "true"); rc.doCpeeCallback = true; } urbot.sendCmd(rc); return ""; }); post("/freedrive", (req, res) -> { urbot.sendFreedrive(1); return ""; }); post("/digital/:which", (req, res) -> { int which=Integer.parseInt(req.params("which")); boolean val = Boolean.valueOf(new String(req.raw().getInputStream().readAllBytes())); urbot.setDigital(which, val); return ""; }); get("/digital/:which", (req, res) -> { int which=Integer.parseInt(req.params("which")); boolean d=urbot.getDigital(which); res.body(String.valueOf(d)); return ""; }); get("/log/:from", (req, res) -> { int from=Integer.parseInt(req.params("from")); from=Integer.max(0,from); var r = URLog.get(from); return r.toJSON(); }); get("/cmdq", (req, res) -> { JsonArray jsa=new JsonArray(); for(var c:urbot.getCmdq()) { jsa.add(c.toJSON()); } return jsa.toString(); }); } }