import fetch from 'isomorphic-fetch'; import {emit} from './event' let domainIp = '192.168.10.'; let initIndex = 1; let totalIndex = 255 / 5; let failTotal = 1; let currentIpIndex = 0; let ws = null; let inteval = null; let timer = null; let time = 60000; let intevalTime = 30000; let isFalse = false; const checkStatus = (response)=>{ console.log("===========") console.log(response); if (response.status >= 200 && response.status < 300) { return response; } const error = new Error(response.statusText); error.response = response; throw error; }; const parseJson = (response)=>{ return response.json(); }; const getIp = ()=>{ console.log("getIp : ",initIndex) for(let i = initIndex; i < (totalIndex + initIndex) ; i++){ let url = 'http://' + domainIp + i + ':9999/getmyid'; console.log(url) fetch( url ,{ // credentials : 'include', method : 'GET', mode : 'cors', }).then(checkStatus) .then(parseJson) .then((data) => { console.log("data :",data); if(data.storeId){ let wsUrl = 'ws://' + domainIp + i + ':7788/notify?from=plant&storeId='+data.storeId; currentIpIndex = i; init(i,data.storeId); } }) .catch((err) =>{ console.error("Err:",err); failTotal++; if(failTotal >= totalIndex + initIndex){ initIndex = totalIndex + initIndex; if(initIndex > 255){ inteval = setTimeout(function () { console.log("------"); window.clearTimeout(inteval); inteval = null; initIndex = 1; failTotal = 1; getIp(); },intevalTime) }else{ getIp(); } } }); } }; const testIp = (ip) => { console.log("testIp : ",ip); let url = 'http://' + domainIp + ip + ':9999/getmyid'; fetch( url ,{ // credentials : 'include', method : 'GET', mode : 'cors', }).then(checkStatus) .then(parseJson) .then((data) => { if(data.storeId){ window.storeId = data.storeId; window.localIp = domainIp + ip; let wsUrl = 'ws://' + domainIp + ip + ':7788/notify?from=plant&storeId='+data.storeId; currentIpIndex = ip; init(ip,data.storeId); } }) .catch((err) =>{ console.error("Err:",err); currentIpIndex = 0; window.clearTimeout(inteval); inteval = null; initIndex = 1; failTotal = 1; getIp() }); } const init = (ip,storeid)=>{ let wsUrl = 'ws://' + domainIp + ip + ':7788/notify?from=plant&storeId=' + storeid; console.log("init :" ,wsUrl); if("WebSocket" in window && !ws && ip && storeid){ ws = new WebSocket(wsUrl); ws.onopen = function() { // Web Socket 已连接上,使用 send() 方法发送数据 // ws.send("发送数据"); clearInterval(timer); timer = null; window.clearTimeout(inteval); inteval = null; initIndex = 1; failTotal = 1; console.log("open"); isFalse = false; emit(CONFIG.socketType.GETSTOREINFO,{ip:domainIp+ip,storeId:storeid}) }; ws.onmessage = function (evt) { var received_msg = JSON.parse(evt.data); //String console.log("数据已接收..."); emit(CONFIG.socketType.GETSOCKETMSG,received_msg); }; ws.onclose = function(err) { // 关闭 websocket console.log("close : ",err); getError(); }; ws.onerror = function (err) { console.error("error : ",err); getError(); } } }; const getError = ()=>{ ws = null; isFalse = true; console.log("getError") if(currentIpIndex){ testIp(currentIpIndex); }else{ window.clearTimeout(inteval); inteval = null; initIndex = 1; failTotal = 1; getIp(); } // if(!ws && !timer){ // console.log("in timer") // timer = setInterval(function () { // getError(); // },time) // } } const sendMsg = (msg) => { if(ws){ try{ ws.send(msg); }catch (e) { console.error("sendMsg error :",e) } } } const closeSocket = ()=>{ if(ws){ try{ ws.close(); ws = null; }catch (e) { console.error("closeSocket error :",e) } } } module.exports = {getIp,sendMsg,init,testIp};