websocket.js 1.9 KB

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