websocket.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. self.importScripts('helper.js');
  2. var parameters = GetRequest();
  3. var cardToken = parameters['cardToken'];
  4. cardToken = cardToken && decodeURIComponent(cardToken);
  5. var errorTime = 0;
  6. var socketURL = decodeURIComponent(parameters['socketURL']);
  7. var intervaler;
  8. doConnect();
  9. // function throttle(fn, delay) {
  10. // var flag = true;
  11. // return () => {
  12. // if (!flag) return;
  13. // flag = false;
  14. // errorTime += delay;
  15. // timer = setTimeout(() => {
  16. // fn();
  17. // flag = true;
  18. // }, delay);
  19. // };
  20. // }
  21. let timeInterval = 1
  22. let quitBool = true
  23. function doConnect() {
  24. var ws = new WebSocket(socketURL);
  25. ws.binaryType = 'arraybuffer';
  26. intervaler = setInterval(() => {
  27. if (ws.readyState === 1) {
  28. ws.send('ping');
  29. } else {
  30. clearInterval(intervaler);
  31. self.postMessage('close');
  32. }
  33. }, 3000);
  34. ws.onerror = function () {
  35. // ws.close(1006);
  36. clearInterval(intervaler);
  37. if (!quitBool) return
  38. if (timeInterval > 7) return self.postMessage('close');
  39. timeInterval++
  40. doConnect()
  41. // if (errorTime > 1000) {
  42. // self.postMessage('close');
  43. // return
  44. // }
  45. // throttle(doConnect, 100)();
  46. };
  47. ws.addEventListener('close', function (e) {
  48. // if (e.code === 1006) {
  49. // clearInterval(intervaler);
  50. // throttle(doConnect, 100);
  51. // if (errorTime > 1000) {
  52. // self.postMessage('close');
  53. // }
  54. // }
  55. });
  56. ws.addEventListener('open', function (event) {
  57. var verifyBuffer = VerifyCode('RK3923C1201900139', cardToken);
  58. ws.send(verifyBuffer);
  59. ws.send(makeSharpness(4))
  60. errorTime = 0;
  61. });
  62. ws.addEventListener('message', function (event) {
  63. var input = new Uint8Array(event.data);
  64. if (input[0] == 0xff) {
  65. self.postMessage(input);
  66. } else {
  67. self.postMessage(input);
  68. }
  69. });
  70. self.addEventListener(
  71. 'message',
  72. function (e) {
  73. switch (e.data) {
  74. case 'close':
  75. clearInterval(intervaler)
  76. ws.close()
  77. break;
  78. case 'endRequest':
  79. quitBool = false
  80. break;
  81. default:
  82. ws.send(e.data);
  83. break;
  84. }
  85. },
  86. false,
  87. );
  88. }
  89. function GetRequest() {
  90. var url = location.search; // 获取url中"?"符后的字串
  91. var obj = new Object();
  92. if (url.indexOf('?') != -1) {
  93. var str = url.substr(1);
  94. strs = str.split('&');
  95. for (var i = 0; i < strs.length; i++) {
  96. obj[strs[i].split('=')[0]] = strs[i].split('=')[1];
  97. }
  98. }
  99. return obj;
  100. }