websocket.js 2.0 KB

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