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; // return () => { // if (!flag) return; // flag = false; // errorTime += delay; // timer = setTimeout(() => { // fn(); // flag = true; // }, delay); // }; // } let timeInterval = 1 let quitBool = true 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(1006); clearInterval(intervaler); if (!quitBool) return if (timeInterval > 7) return self.postMessage('close'); timeInterval++ doConnect() // if (errorTime > 1000) { // self.postMessage('close'); // return // } // throttle(doConnect, 100)(); }; ws.addEventListener('close', function (e) { // if (e.code === 1006) { // clearInterval(intervaler); // throttle(doConnect, 100); // if (errorTime > 1000) { // self.postMessage('close'); // } // } }); ws.addEventListener('open', function (event) { var verifyBuffer = VerifyCode('RK3923C1201900139', cardToken); ws.send(verifyBuffer); errorTime = 0; }); 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) { switch (e.data) { case 'close': clearInterval(intervaler) ws.close() break; case 'endRequest': quitBool = false break; default: ws.send(e.data); break; } }, 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; }