websocket.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. function doConnect() {
  22. var ws = new WebSocket(socketURL);
  23. ws.binaryType = 'arraybuffer';
  24. intervaler = setInterval(() => {
  25. if (ws.readyState === 1) {
  26. ws.send('ping');
  27. } else {
  28. clearInterval(intervaler);
  29. self.postMessage('close');
  30. }
  31. }, 3000);
  32. ws.onerror = function () {
  33. // ws.close(1006);
  34. clearInterval(intervaler);
  35. throttle(doConnect, 100);
  36. if (errorTime > 1000) {
  37. self.postMessage('close');
  38. }
  39. };
  40. ws.addEventListener('close', function (e) {
  41. // if (e.code === 1006) {
  42. // clearInterval(intervaler);
  43. // throttle(doConnect, 100);
  44. // if (errorTime > 1000) {
  45. // self.postMessage('close');
  46. // }
  47. // }
  48. });
  49. ws.addEventListener('open', function (event) {
  50. var verifyBuffer = VerifyCode('RK3923C1201900139', cardToken);
  51. ws.send(verifyBuffer);
  52. errorTime = 0;
  53. });
  54. ws.addEventListener('message', function (event) {
  55. var input = new Uint8Array(event.data);
  56. if (input[0] == 0xff) {
  57. self.postMessage(input);
  58. } else {
  59. self.postMessage(input);
  60. }
  61. });
  62. self.addEventListener(
  63. 'message',
  64. function (e) {
  65. if (e.data === 'close') {
  66. clearInterval(intervaler);
  67. ws.close();
  68. } else {
  69. ws.send(e.data);
  70. }
  71. },
  72. false,
  73. );
  74. }
  75. function GetRequest() {
  76. var url = location.search; // 获取url中"?"符后的字串
  77. var obj = new Object();
  78. if (url.indexOf('?') != -1) {
  79. var str = url.substr(1);
  80. strs = str.split('&');
  81. for (var i = 0; i < strs.length; i++) {
  82. obj[strs[i].split('=')[0]] = strs[i].split('=')[1];
  83. }
  84. }
  85. return obj;
  86. }