websocket.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. errorTime = 0;
  60. });
  61. ws.addEventListener('message', function (event) {
  62. var input = new Uint8Array(event.data);
  63. if (input[0] == 0xff) {
  64. self.postMessage(input);
  65. } else {
  66. self.postMessage(input);
  67. }
  68. });
  69. self.addEventListener(
  70. 'message',
  71. function (e) {
  72. switch (e.data) {
  73. case 'close':
  74. clearInterval(intervaler)
  75. ws.close()
  76. break;
  77. case 'endRequest':
  78. quitBool = false
  79. break;
  80. default:
  81. ws.send(e.data);
  82. break;
  83. }
  84. },
  85. false,
  86. );
  87. }
  88. function GetRequest() {
  89. var url = location.search; // 获取url中"?"符后的字串
  90. var obj = new Object();
  91. if (url.indexOf('?') != -1) {
  92. var str = url.substr(1);
  93. strs = str.split('&');
  94. for (var i = 0; i < strs.length; i++) {
  95. obj[strs[i].split('=')[0]] = strs[i].split('=')[1];
  96. }
  97. }
  98. return obj;
  99. }