websocket.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. self.importScripts("helper.js");
  2. var parameters = GetRequest();
  3. var ip = parameters["ip"];
  4. var appletPushAddress = parameters["appletPushAddress"];
  5. var isWSS = true;
  6. var errorTime = 0;
  7. var socketURL = isWSS ? "wss://" + appletPushAddress + "?cardIp=" + ip : "ws://" + appletPushAddress + "?cardIp=" + ip;
  8. doConnect();
  9. function throttle(fn, delay) {
  10. var flag = true;
  11. errorTime += delay;
  12. return () => {
  13. if (!flag) return;
  14. flag = false;
  15. timer = setTimeout(() => {
  16. fn();
  17. flag = true;
  18. }, delay);
  19. };
  20. }
  21. function doConnect() {
  22. var ws = new WebSocket(socketURL);
  23. ws.binaryType = 'arraybuffer';
  24. ws.onclose = function () {
  25. ws.close();
  26. throttle(doConnect, 100);
  27. if (errorTime > 1000) {
  28. self.postMessage('close');
  29. }
  30. }
  31. ws.onerror = function () {
  32. ws.close();
  33. throttle(doConnect, 100);
  34. if (errorTime > 1000) {
  35. self.postMessage('close');
  36. }
  37. }
  38. ws.addEventListener('open', function (event) {
  39. ws.send(ConfigChannel("RK3923C1201900139"));
  40. var checkBuffer = GetScreenState();
  41. ws.send(checkBuffer);
  42. });
  43. ws.addEventListener('message', function (event) {
  44. var input = new Uint8Array(event.data);
  45. ws.send('ping');
  46. if (input[0] == 0xff) {
  47. self.postMessage(input);
  48. } else {
  49. self.postMessage(input);
  50. }
  51. });
  52. self.addEventListener('message', function (e) {
  53. ws.send(e.data);
  54. ws.send('ping');
  55. }, false);
  56. }
  57. function GetRequest() {
  58. var url = location.search; // 获取url中"?"符后的字串
  59. var obj = new Object();
  60. if (url.indexOf("?") != -1) {
  61. var str = url.substr(1);
  62. strs = str.split("&");
  63. for (var i = 0; i < strs.length; i++) {
  64. obj[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
  65. }
  66. }
  67. return obj;
  68. }