websocket.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. 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. 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();
  34. clearInterval(intervaler);
  35. throttle(doConnect, 100);
  36. if (errorTime > 1000) {
  37. self.postMessage('close');
  38. }
  39. }
  40. ws.addEventListener('open', function (event) {
  41. var verifyBuffer = VerifyCode('RK3923C1201900139', cardToken);
  42. ws.send(verifyBuffer);
  43. });
  44. ws.addEventListener('message', function (event) {
  45. var input = new Uint8Array(event.data);
  46. if (input[0] == 0xff) {
  47. self.postMessage(input);
  48. } else {
  49. self.postMessage(input);
  50. }
  51. });
  52. self.addEventListener('message', function (e) {
  53. if (e === 'close') {
  54. clearInterval(intervaler);
  55. ws.close();
  56. } else {
  57. ws.send(e.data);
  58. }
  59. }, false);
  60. }
  61. function GetRequest() {
  62. var url = location.search; // 获取url中"?"符后的字串
  63. var obj = new Object();
  64. if (url.indexOf("?") != -1) {
  65. var str = url.substr(1);
  66. strs = str.split("&");
  67. for (var i = 0; i < strs.length; i++) {
  68. obj[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
  69. }
  70. }
  71. return obj;
  72. }