WebServer.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. if(cmd==null)
  33. cmd=req.body();
  34. RobotCommand rc=new RobotCommand(cmd);
  35. rc.cpeeCallback = req.headers("CPEE-CALLBACK");
  36. rc.cpeeCallbackId = req.headers("CPEE-CALLBACK-ID");
  37. rc.cpeeInstanceURL = req.headers("CPEE-INSTANCE-URL");
  38. if (Boolean.valueOf(req.queryParams("callback"))) {
  39. res.header("CPEE-CALLBACK", "true");
  40. rc.doCpeeCallback = true;
  41. }
  42. urbot.sendCmd(rc);
  43. return "";
  44. });
  45. post("/freedrive", (req, res) -> {
  46. urbot.sendFreedrive(1);
  47. return "";
  48. });
  49. post("/digital/:which", (req, res) -> {
  50. int which=Integer.parseInt(req.params("which"));
  51. boolean val = Boolean.valueOf(new String(req.raw().getInputStream().readAllBytes()));
  52. urbot.setDigital(which, val);
  53. return "";
  54. });
  55. get("/digital/:which", (req, res) -> {
  56. int which=Integer.parseInt(req.params("which"));
  57. boolean d=urbot.getDigital(which);
  58. res.body(String.valueOf(d));
  59. return "";
  60. });
  61. get("/log/:from", (req, res) -> {
  62. int from=Integer.parseInt(req.params("from"));
  63. from=Integer.max(0,from);
  64. var r = URLog.get(from);
  65. return r.toJSON();
  66. });
  67. get("/cmdq", (req, res) -> {
  68. JsonArray jsa=new JsonArray();
  69. for(var c:urbot.getCmdq()) {
  70. jsa.add(c.toJSON());
  71. }
  72. return jsa.toString();
  73. });
  74. get("/running", (req, res) -> {
  75. var rc=urbot.getRunningScript();
  76. if(rc.isPresent()) {
  77. return rc.get().toJSON();
  78. }
  79. return "[{}]";
  80. });
  81. get("/files/:path", (req, res) -> {
  82. String path=req.params("from");
  83. SSHClient ssh = new SSHClient();
  84. // ssh.useCompression(); // Can lead to significant speedup (needs JZlib in classpath)
  85. ssh.loadKnownHosts();
  86. ssh.connect(params.robotIP, params.robotPort);
  87. try {
  88. ssh.authPublickey(System.getProperty(params.sshUsername));
  89. ssh.newSCPFileTransfer().download(path, new FileSystemFile("C:\\tmp\\"));
  90. }catch (Exception e) {
  91. logger.warn("",e);
  92. } finally{
  93. ssh.disconnect();
  94. }
  95. return "[{}]";
  96. });
  97. }
  98. }