123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package at.acdp.urweb.web;
- import at.acdp.urweb.Params;
- import at.acdp.urweb.RobotCommand;
- import at.acdp.urweb.URBot;
- import at.acdp.urweb.rt.GetRobotRealtimeData;
- import at.acdp.urweb.sclient.URLog;
- import com.eclipsesource.json.JsonArray;
- import net.schmizz.sshj.SSHClient;
- import net.schmizz.sshj.xfer.FileSystemFile;
- 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;
- private GetRobotRealtimeData rtbot;
- public WebServer(Params params) {
- this.params = params;
- }
- public void start() {
- this.urbot=new URBot(params.robotIP, params.robotPort);
- this.urbot.start();
- // this.rtbot=new GetRobotRealtimeData(params.robotIP, params.rtPort);
- // this.rtbot.start();
- port(params.port);
- if (!params.webroot.isEmpty())
- staticFileLocation(params.webroot);
- else
- staticFiles.location("/webroot");
- post("/cmd", (req, res) -> {
- var cmd=req.queryParams("script");
- if(cmd==null)
- cmd=req.body();
- 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();
- });
- get("/running", (req, res) -> {
- var rc=urbot.getRunningScript();
- if(rc.isPresent()) {
- return rc.get().toJSON();
- }
- return "[{}]";
- });
- get("/files/:path", (req, res) -> {
- String path=req.params("from");
- SSHClient ssh = new SSHClient();
- // ssh.useCompression(); // Can lead to significant speedup (needs JZlib in classpath)
- ssh.loadKnownHosts();
- ssh.connect(params.robotIP, params.robotPort);
- try {
- ssh.authPublickey(System.getProperty(params.sshUsername));
- ssh.newSCPFileTransfer().download(path, new FileSystemFile("C:\\tmp\\"));
- }catch (Exception e) {
- logger.warn("",e);
- } finally{
- ssh.disconnect();
- }
- return "[{}]";
- });
- }
- }
|