debugger.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. let socket = null, socketHandler = {},
  2. frontTimer = null, backTimer = null, Timeout = 500,
  3. DevicesAll = {}, DevicesShow = {},
  4. DeviceNow = {
  5. seq: "", online: false, location: "", ppv1: 0, ppv2: 0, ppv3: 0, ppv4: 0
  6. };
  7. const strBase = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789", strLen = 62;
  8. const randStr = len => {
  9. let res = "";
  10. for (let i = 0; i < len; i++) res += strBase[Math.floor(Math.random() * strLen)];
  11. return res;
  12. }, createDeviceNode = (seq, online) => {
  13. let $device = document.createElement("div"),
  14. $seq = document.createElement("span"),
  15. $status = document.createElement("span");
  16. $device.setAttribute("rel", seq);
  17. $device.className = "device " + (online ? "online" : "offline");
  18. $seq.className = "seq";
  19. $seq.innerText = seq;
  20. $status.className = "status";
  21. $status.innerText = online ? "在线" : "离线";
  22. $device.appendChild($seq);
  23. $device.appendChild($status);
  24. return $device;
  25. }, connectSocket = () => {
  26. const did = randStr(16);
  27. socket = new WebSocket(`${Url}/${did}`);
  28. socket.onopen = () => {
  29. setInterval(() => sendEvent("pin", null), 50 * 1000);
  30. sendEvent("listDevices", null);
  31. }
  32. socket.onmessage = data => {
  33. let body = JSON.parse(data.data);
  34. socketHandler[body.event] && socketHandler[body.event](body.data);
  35. }
  36. socket.onclose = e => {
  37. socket = null;
  38. if (e.code === 1006) connectSocket();
  39. }
  40. }, sendEvent = (event, data) => {
  41. if (socket !== null) socket.send(JSON.stringify({event, data}));
  42. else setTimeout(() => sendEvent(event, data), 1000);
  43. };
  44. window.onload = () => {
  45. const $searchIcon = document.getElementById("search-icon"),
  46. $backIcon = document.getElementById("back-icon"),
  47. $detailPage = document.getElementById("detail-page"),
  48. $seqInput = document.getElementById("seq-input"),
  49. $devices = document.getElementById("devices"),
  50. $detailTitle = document.getElementById("seq-text"),
  51. $updateLocBtn = document.getElementById("update-loc"),
  52. $locationInput = document.getElementById("location"),
  53. $ppvs = [
  54. [document.getElementById("ppv1"), document.getElementById("update-ppv1")],
  55. [document.getElementById("ppv2"), document.getElementById("update-ppv2")],
  56. [document.getElementById("ppv3"), document.getElementById("update-ppv3")],
  57. [document.getElementById("ppv4"), document.getElementById("update-ppv4")]
  58. ],
  59. $openFront = document.getElementById("open-front"),
  60. $openBack = document.getElementById("open-back"),
  61. $openDebug = document.getElementById("open-debug"),
  62. $stopDebug = document.getElementById("stop-debug");
  63. const filterAndShow = seq => {
  64. $devices.innerHTML = "";
  65. for (let key in DevicesAll) if (key.includes(seq)) DevicesShow[key] = DevicesAll[key];
  66. for (let key in DevicesShow) {
  67. let $device = createDeviceNode(key, DevicesShow[key].online);
  68. $device.onclick = function () {
  69. DeviceNow = DevicesShow[this.getAttribute("rel")];
  70. $detailTitle.innerText = DeviceNow.seq;
  71. $locationInput.value = DeviceNow.location;
  72. $ppvs[0][0].value = DeviceNow.ppv1;
  73. $ppvs[1][0].value = DeviceNow.ppv2;
  74. $ppvs[2][0].value = DeviceNow.ppv3;
  75. $ppvs[3][0].value = DeviceNow.ppv4;
  76. $detailPage.className = "slide-in";
  77. }
  78. $devices.appendChild($device);
  79. }
  80. };
  81. $searchIcon.setAttribute("src", `${Prefix}/icon/search.svg`);
  82. $backIcon.setAttribute("src", `${Prefix}/icon/back.svg`);
  83. $backIcon.onclick = () => $detailPage.className = "slide-out";
  84. $seqInput.onchange = () => filterAndShow($seqInput.value.trim());
  85. $updateLocBtn.onclick = () => {
  86. let loc = $locationInput.value.trim();
  87. if (loc === "") return alert("location is blank");
  88. sendEvent("setLocation", {seq: DeviceNow.seq, loc: loc});
  89. }
  90. $ppvs.forEach((pair, index) => {
  91. pair[1].onclick = function () {
  92. let val = +pair[0].value;
  93. if (val === undefined || val < 1 || val > 15) return alert("require: 0 < ppv < 16");
  94. console.log({seq: DeviceNow.seq, index: index, value: val});
  95. sendEvent("setPpv", {seq: DeviceNow.seq, index: index, value: val});
  96. }
  97. });
  98. $openFront.onclick = () => {
  99. if (frontTimer !== null) return;
  100. frontTimer = setTimeout(() => {
  101. clearTimeout(frontTimer);
  102. frontTimer = null;
  103. }, Timeout);
  104. sendEvent("openGate", {seq: DeviceNow.seq, kind: "Changing"});
  105. }
  106. $openBack.onclick = () => {
  107. if (backTimer !== null) return;
  108. backTimer = setTimeout(() => {
  109. clearTimeout(backTimer);
  110. backTimer = null;
  111. }, Timeout);
  112. sendEvent("openGate", {seq: DeviceNow.seq, kind: "Fixing"});
  113. }
  114. $openDebug.onclick = () => sendEvent("setDebug", {seq: DeviceNow.seq, debug: true});
  115. $stopDebug.onclick = () => sendEvent("setDebug", {seq: DeviceNow.seq, debug: false});
  116. socketHandler.__Error_Event__ = msg => alert(msg);
  117. socketHandler.devices = data => {
  118. DevicesAll = data;
  119. filterAndShow("");
  120. }
  121. socketHandler.newDevice = device => {
  122. DevicesAll[device.seq] = device;
  123. filterAndShow($seqInput.value.trim());
  124. }
  125. socketHandler.deviceStatusChange = data => {
  126. DevicesAll[data.seq].online = data.online;
  127. filterAndShow($seqInput.value.trim());
  128. }
  129. socketHandler.openResult = data => alert(data.type + (data.result ? "-成功" : "-失败"));
  130. socketHandler.workFinished = data => alert(data);
  131. connectSocket();
  132. }