WebServer.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package at.acdp.urweb.web;
  2. import at.acdp.urweb.Params;
  3. import at.acdp.urweb.RobotCommand;
  4. import at.acdp.urweb.URBot;
  5. import at.acdp.urweb.rt.GetRobotRealtimeData;
  6. import at.acdp.urweb.sclient.URLog;
  7. import com.eclipsesource.json.JsonArray;
  8. import net.schmizz.sshj.SSHClient;
  9. import net.schmizz.sshj.xfer.FileSystemFile;
  10. import org.slf4j.LoggerFactory;
  11. import static spark.Spark.*;
  12. public class WebServer {
  13. private final static org.slf4j.Logger logger = LoggerFactory.getLogger(WebServer.class);
  14. private URBot urbot;
  15. private final Params params;
  16. private GetRobotRealtimeData rtbot;
  17. public WebServer(Params params) {
  18. this.params = params;
  19. }
  20. public void start() {
  21. this.urbot=new URBot(params.robotIP, params.robotPort);
  22. this.urbot.start();
  23. // this.rtbot=new GetRobotRealtimeData(params.robotIP, params.rtPort);
  24. // this.rtbot.start();
  25. port(params.port);
  26. if (!params.webroot.isEmpty())
  27. staticFileLocation(params.webroot);
  28. else
  29. staticFiles.location("/webroot");
  30. post("/cmd", (req, res) -> {
  31. var cmd=req.queryParams("script");
  32. RobotCommand rc=new RobotCommand(cmd);
  33. rc.cpeeCallback = req.headers("CPEE-CALLBACK");
  34. rc.cpeeCallbackId = req.headers("CPEE-CALLBACK-ID");
  35. rc.cpeeInstanceURL = req.headers("CPEE-INSTANCE-URL");
  36. if (Boolean.valueOf(req.queryParams("callback"))) {
  37. res.header("CPEE-CALLBACK", "true");
  38. rc.doCpeeCallback = true;
  39. }
  40. urbot.sendCmd(rc);
  41. return "";
  42. });
  43. post("/freedrive", (req, res) -> {
  44. urbot.sendFreedrive(1);
  45. return "";
  46. });
  47. post("/digital/:which", (req, res) -> {
  48. int which=Integer.parseInt(req.params("which"));
  49. boolean val = Boolean.valueOf(new String(req.raw().getInputStream().readAllBytes()));
  50. urbot.setDigital(which, val);
  51. return "";
  52. });
  53. get("/digital/:which", (req, res) -> {
  54. int which=Integer.parseInt(req.params("which"));
  55. boolean d=urbot.getDigital(which);
  56. res.body(String.valueOf(d));
  57. return "";
  58. });
  59. get("/log/:from", (req, res) -> {
  60. int from=Integer.parseInt(req.params("from"));
  61. from=Integer.max(0,from);
  62. var r = URLog.get(from);
  63. return r.toJSON();
  64. });
  65. get("/cmdq", (req, res) -> {
  66. JsonArray jsa=new JsonArray();
  67. for(var c:urbot.getCmdq()) {
  68. jsa.add(c.toJSON());
  69. }
  70. return jsa.toString();
  71. });
  72. get("/running", (req, res) -> {
  73. var rc=urbot.getRunningScript();
  74. if(rc.isPresent()) {
  75. return rc.get().toJSON();
  76. }
  77. return "[{}]";
  78. });
  79. get("/files/:path", (req, res) -> {
  80. String path=req.params("from");
  81. SSHClient ssh = new SSHClient();
  82. // ssh.useCompression(); // Can lead to significant speedup (needs JZlib in classpath)
  83. ssh.loadKnownHosts();
  84. ssh.connect(params.robotIP, params.robotPort);
  85. try {
  86. ssh.authPublickey(System.getProperty(params.sshUsername));
  87. ssh.newSCPFileTransfer().download(path, new FileSystemFile("C:\\tmp\\"));
  88. }catch (Exception e) {
  89. logger.warn("",e);
  90. } finally{
  91. ssh.disconnect();
  92. }
  93. return "[{}]";
  94. });
  95. }
  96. }