var data = { loc: [], arc: [] } var settings = { location: { home: { lat: 48.1, lng: 16.3 }, precision: 0 }, colors: { loc: { default: "green", dualsender: "orange" }, arc: { default: ["green", "red"], dualsender: ["orange", "orange"] } }, sizes: { loc: { default: 0.1 }, arc: { default: 1.1 }, globe: { arcDashLength: 0.4, arcAltitudeAutoScale: 0.4, arcDashGap: 0.1, arcDashInitialGap: 0.1, arcDashAnimateTime: 7000, arcStroke: 0.5, labelSize: 0, labelDotRadius: 0.4, labelResolution: 2 } }, timer:{ del: 30 } } var geoip = require('fast-geoip'); async function addArc(src, dest, uid, src_name, dest_name){ const arcName = src_name + " -> " + dest_name; var geoSrc = undefined; var startLat = undefined; var startLng = undefined; var geoDest = undefined; var endLat = undefined; var endLng = undefined; if(!data.arc.some(x => x.src === src && x.dest === dest)) { if (src.includes("192.168.1.") || src.includes("127.0.0.1")) { startLat = round(settings.location.home.lat, settings.location.precision) startLng = round(settings.location.home.lng, settings.location.precision) } else { geoSrc = await geoip.lookup(src); startLat = round(geoSrc.ll[0], settings.location.precision) startLng = round(geoSrc.ll[1], settings.location.precision) if (geoSrc == undefined) { startLat = round(settings.location.home.lat, settings.location.precision) startLng = round(settings.location.home.lng, settings.location.precision) } } if (dest.includes("192.168.1.") || dest.includes("127.0.0.1")) { endLat = round(settings.location.home.lat, settings.location.precision) endLng = round(settings.location.home.lng, settings.location.precision) } else { geoDest = await geoip.lookup(dest); endLat = round(geoDest.ll[0], settings.location.precision) endLng = round(geoDest.ll[1], settings.location.precision) if (geoDest == undefined) { endLat = round(settings.location.home.lat, settings.location.precision) endLng = round(settings.location.home.lng, settings.location.precision) } } var txrx = [{src: src, dest: dest, src_name: src_name, dest_name: dest_name}]; var dat = { uid: uid, name: arcName, startLat: startLat, startLng: startLng, endLat: endLat, endLng: endLng, color: settings.colors.arc.default, stroke: settings.sizes.arc.default, src: src, dest: dest, src_name: src_name, dest_name: dest_name, txrx: txrx } if(!data.arc.some(x => x.startLat === startLat && x.startLng === startLng && x.endLat === endLat && x.endLng === endLng)){ const newUid = addLoc(arcName, startLat, startLng, uid) dat.uid = newUid; if (!data.arc.some(x => x.startLat === startLat && x.startLng === startLng && x.endLat === endLat && x.endLng === endLng)) { if (!data.arc.some(x => x.startLat === endLat && x.startLng === endLng && x.endLat === startLat && x.endLng === startLng)) { data.arc.push(dat); console.log(dat.uid) } else { const dataIndex = data.arc.findIndex(x => x.startLat === endLat && x.startLng === endLng && x.endLat === startLat && x.endLng === startLng); data.arc[dataIndex].color = settings.colors.arc.dualsender; data.arc[dataIndex].txrx.push({src: dat.src, dest: dat.dest, src_name: dat.src_name, dest_name: dat.dest_name}) } } else { const dataIndex = data.arc.findIndex(x => x.startLat === startLat && x.startLng === startLng && x.endLat === endLat && x.endLng === endLng); const arcuid = data.arc[dataIndex].uid; var loc = getLoc(arcuid) loc.color = settings.colors.loc.dualsender; loc.txrx.push({src: dat.src, dest: dat.dest, src_name: dat.src_name, dest_name: dat.dest_name}) editLoc(loc); } } } } function round(value, precision) { var multiplier = Math.pow(10, precision || 0); return Math.round(value * multiplier) / multiplier; } function addLoc(name, lat, lng, uid, src, dest, src_name, dest_name){ var txrx = [{src: src, dest: dest, src_name: src_name, dest_name: dest_name}] var dat = { uid: uid, name: name, lat: lat, lng: lng, size: settings.sizes.loc.default, color: settings.colors.loc.default, txrx: txrx }; if(!data.loc.some(x => x.lat === lat && x.lng === lng)) { data.loc.push(dat); return dat.uid }else{ const dataIndex = data.loc.findIndex(obj => obj.lat === lat && obj.lng === lng); data.loc[dataIndex].name = data.loc[dataIndex].name + "\n" + name; return data.loc[dataIndex].uid } } function getLocColor(){ return settings.colors.loc.default; } function getArcColor(){ return settings.colors.arc.default; } function getData(){ return data; } function getDisplayData(){ var ret = data; ret.settings = settings return ret } function getSettigns(){ return settings; } function filterUid(tofilter){ var ret = [] tofilter.forEach(a => { const {uid, ...newObj} = a; ret.push(newObj) }) return ret } function getLocData(){ return data.loc; } function getArcData(){ return data.arc; } function getLoc(uid){ return data.loc[data.loc.findIndex(x => x.uid === uid)]; } function editLoc(loc){ const dataIndex = data.loc.findIndex(x => x.uid === loc.uid); data.loc[dataIndex] = loc; } function delUids(uids){ uids.forEach(uid => delUid(uid)) } function delUid(uid){ console.log("delglobe") console.log(uid) delArc(uid); delLoc(uid); } function delLoc(uid){ data.loc = data.loc.filter(loc => loc.uid !== uid) } function delArc(uid){ data.arc = data.arc.filter(arc => arc.uid !== uid) } module.exports = { addArc, addLoc, getLocData, getArcColor, getData, getArcData, getLocColor, getDisplayData, delUids, getSettigns }