self.importScripts("helper.js"); var parameters = GetRequest(); var cardToken = parameters["cardToken"]; cardToken = cardToken && decodeURIComponent(cardToken); var errorTime = 0; var socketURL = decodeURIComponent(parameters['socketURL']); var intervaler; doConnect(); function throttle(fn, delay) { var flag = true; errorTime += delay; return () => { if (!flag) return; flag = false; timer = setTimeout(() => { fn(); flag = true; }, delay); }; } function doConnect() { var ws = new WebSocket(socketURL); ws.binaryType = 'arraybuffer'; intervaler = setInterval(() => { if (ws.readyState === 1) { ws.send("ping"); } else { clearInterval(intervaler); self.postMessage('close'); } }, 3000); ws.onerror = function () { ws.close(); clearInterval(intervaler); throttle(doConnect, 100); if (errorTime > 1000) { self.postMessage('close'); } } ws.addEventListener('open', function (event) { var verifyBuffer = VerifyCode('RK3923C1201900139', cardToken); ws.send(verifyBuffer); }); ws.addEventListener('message', function (event) { var input = new Uint8Array(event.data); if (input[0] == 0xff) { self.postMessage(input); } else { self.postMessage(input); } }); self.addEventListener('message', function (e) { if (e === 'close') { clearInterval(intervaler); ws.close(); } else { ws.send(e.data); } }, false); } function GetRequest() { var url = location.search; // 获取url中"?"符后的字串 var obj = new Object(); if (url.indexOf("?") != -1) { var str = url.substr(1); strs = str.split("&"); for (var i = 0; i < strs.length; i++) { obj[strs[i].split("=")[0]] = (strs[i].split("=")[1]); } } return obj; }