main.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. function main() {
  2. let root = window.document.getElementById("main");
  3. if (root != null) {
  4. window.ipc = new IPC(root);
  5. }
  6. }
  7. class IPC {
  8. constructor(root) {
  9. // connect to the websocket
  10. window.interpreter = new Interpreter(root);
  11. let ws = new WebSocket(WS_ADDR);
  12. function ping() {
  13. ws.send("__ping__");
  14. }
  15. ws.onopen = () => {
  16. // we ping every 30 seconds to keep the websocket alive
  17. setInterval(ping, 30000);
  18. ws.send(serializeIpcMessage("initialize"));
  19. };
  20. ws.onerror = (err) => {
  21. // todo: retry the connection
  22. };
  23. ws.onmessage = (message) => {
  24. // Ignore pongs
  25. if (message.data != "__pong__") {
  26. const event = JSON.parse(message.data);
  27. switch (event.type) {
  28. case "edits":
  29. let edits = event.data;
  30. window.interpreter.handleEdits(edits);
  31. break;
  32. case "query":
  33. Function("Eval", `"use strict";${event.data};`)();
  34. break;
  35. }
  36. }
  37. };
  38. this.ws = ws;
  39. }
  40. postMessage(msg) {
  41. this.ws.send(msg);
  42. }
  43. }