diff --git a/package.nw/lib/gt.js b/package.nw/lib/gt.js index 30c4112..459001d 100644 --- a/package.nw/lib/gt.js +++ b/package.nw/lib/gt.js @@ -4665,6 +4665,7 @@ function setStrikesButton() { strikesImg.style.webkitFilter = "grayscale(1)"; } + g_gtLiveStatusUpdate = true; } function toggleStrikesValue() @@ -5210,8 +5211,6 @@ function displayTime() if (g_mapSettings.strikes && g_mapSettings.offlineMode == false) { - if (g_strikeWebSocket == null) loadStrikes(); - var now = Date.now(); for (var time in g_bolts) { @@ -5225,17 +5224,6 @@ function displayTime() else { g_layerSources.strikes.clear(); - if (g_strikeWebSocket != null) - { - try - { - g_strikeWebSocket.close(); - } - catch (e) - { - g_strikeWebSocket = null; - } - } } if (g_currentNightState != g_nightTime) @@ -5382,20 +5370,17 @@ g_lightningGlobal[1] = new ol.style.Icon({ }); var g_bolts = {}; -var g_strikeWebSocket = null; -var g_strikeInterval = null; var g_strikeRange = 0.4; function toggleStrikeGlobal() { - g_mapSettings.strikesGlobal = - g_mapSettings.strikesGlobal == false; + g_mapSettings.strikesGlobal = g_mapSettings.strikesGlobal == false; saveMapSettings(); - var msg = "Local Strikes"; + let msg = "Local Strikes"; if (g_mapSettings.strikesGlobal == true) msg = "Global Strikes"; - var worker = + let worker = "Strike Distance Changed
" + msg + "
"; if (g_mapSettings.strikes == false) { worker += "
Detection is not enabled!"; } addLastTraffic(worker); @@ -5403,169 +5388,67 @@ function toggleStrikeGlobal() g_layerSources.strikes.clear(); } -function setStrikeDistance() +function handleStrike(strike) { + let index = Date.now(); + while (index in g_bolts) index++; + + let inRange = true; + + if (Math.abs(strike.o - g_myLon) > g_strikeRange) inRange = false; + + if (Math.abs(strike.a - g_myLat) > g_strikeRange) inRange = false; + if ( - g_mapSettings.offlineMode == true && - g_strikeWebSocket != null && - g_strikeWebSocket.readyState != 3 + g_mapSettings.strikesGlobal || + (g_mapSettings.strikesGlobal == false && inRange) ) { - g_strikeWebSocket.close(); - return; + g_bolts[index] = iconFeature( + ol.proj.fromLonLat([strike.o, strike.a]), + inRange ? g_lightningBolt : g_lightningGlobal[0], + 1 + ); + + g_layerSources.strikes.addFeature(g_bolts[index]); } - if (g_strikeWebSocket != null) + if (inRange == true) { - var distance = g_strikeRange; - if (g_mapSettings.strikesGlobal == true) distance = 1000; + playStrikeAlert(); - var send = "{\"west\":-180,\"east\":180,\"north\":-90,\"south\":-90}"; + let dist = + parseInt( + MyCircle.distance( + g_myLat, + g_myLon, + strikes.a, + strikes.o, + distanceUnit.value + ) * MyCircle.validateRadius(distanceUnit.value) + ).toLocaleString() + + " " + + distanceUnit.value.toLowerCase(); + let azim = + parseInt( + MyCircle.bearing(g_myLat, g_myLon, strike.a, strike.o) + ).toLocaleString() + "°"; - if (g_strikeInterval == null) { g_strikeInterval = setInterval(setStrikeDistance, 300000); } + let worker = + "Lighting Strike Detected!
"; + worker += + "" + userTimeString(null) + "
"; + worker += + "Distance: " + + dist + + "
"; + worker += + "Bearing: " + + azim + + ""; - try - { - g_strikeWebSocket.send(send); - } - catch (e) - { - g_strikeWebSocket = null; - } + addLastTraffic(worker); } - else - { - if (g_strikeInterval != null) - { - clearInterval(g_strikeInterval); - g_strikeInterval = null; - } - } -} - -var g_strikeCount = 0; -function loadStrikes() -{ - if (g_strikeWebSocket) return; - - var rnd = parseInt(Math.random() * 4); - var ws_server = ""; - if (rnd < 1) - { - ws_server = "ws7.blitzortung.org"; - } - else if (rnd < 2) - { - ws_server = "ws6.blitzortung.org"; - } - else if (rnd < 3) - { - ws_server = "ws5.blitzortung.org"; - } - else - { - ws_server = "ws1.blitzortung.org"; - } - - try - { - g_strikeWebSocket = new WebSocket("wss:///" + ws_server + ":3000"); - } - catch (e) - { - g_strikeWebSocket = null; - return; - } - - g_strikeWebSocket.onopen = function () - { - setStrikeDistance(); - }; - - g_strikeWebSocket.onmessage = function (evt) - { - var Strikes = JSON.parse(evt.data); - Strikes.sig = null; - - if ( - "delay" in Strikes && - "time" in Strikes && - "lat" in Strikes && - "lon" in Strikes - ) - { - var index = Date.now(); - while (index in g_bolts) index++; - - var inRange = true; - - if (Math.abs(Strikes.lon - g_myLon) > g_strikeRange) inRange = false; - - if (Math.abs(Strikes.lat - g_myLat) > g_strikeRange) inRange = false; - - if ( - g_mapSettings.strikesGlobal || - (g_mapSettings.strikesGlobal == false && inRange) - ) - { - g_bolts[index] = iconFeature( - ol.proj.fromLonLat([Strikes.lon, Strikes.lat]), - inRange ? g_lightningBolt : g_lightningGlobal[0], - 1 - ); - - g_layerSources.strikes.addFeature(g_bolts[index]); - } - - if (inRange == true) - { - playStrikeAlert(); - - var dist = - parseInt( - MyCircle.distance( - g_myLat, - g_myLon, - Strikes.lat, - Strikes.lon, - distanceUnit.value - ) * MyCircle.validateRadius(distanceUnit.value) - ).toLocaleString() + - " " + - distanceUnit.value.toLowerCase(); - var azim = - parseInt( - MyCircle.bearing(g_myLat, g_myLon, Strikes.lat, Strikes.lon) - ).toLocaleString() + "°"; - - var worker = - "Lighting Strike Detected!
"; - worker += - "" + userTimeString(null) + "
"; - worker += - "Distance: " + - dist + - "
"; - worker += - "Bearing: " + - azim + - ""; - - addLastTraffic(worker); - } - } - delete evt.data; - }; - - g_strikeWebSocket.onerror = function () - { - g_strikeWebSocket = null; - }; - - g_strikeWebSocket.onclose = function () - { - g_strikeWebSocket = null; - }; } function toggleMouseTrack() diff --git a/package.nw/lib/gtws.js b/package.nw/lib/gtws.js index d98ee67..f6a0a38 100644 --- a/package.nw/lib/gtws.js +++ b/package.nw/lib/gtws.js @@ -9,7 +9,8 @@ var g_chatRecvFunctions = { info: gtChatUpdateCall, drop: gtChatRemoveCall, mesg: gtChatMessage, - o: gtSpotMessage + o: gtSpotMessage, + l: gtLightningStrike }; var ChatState = Object(); @@ -235,8 +236,9 @@ function gtChatSendStatus() msg.mode = myMode; msg.band = myBand; msg.src = "GT"; - msg.canmsg = g_appSettings.gtMsgEnable == true; + msg.canmsg = g_appSettings.gtMsgEnable; msg.o = g_appSettings.gtSpotEnable == true ? 1 : 0; + msg.l = g_mapSettings.strikes == true ? 1 : 0; msg = JSON.stringify(msg); if (msg != g_lastGtStatus) @@ -595,6 +597,15 @@ function gtSpotMessage(jsmesg) addNewOAMSSpot(jsmesg.cid, jsmesg.db); } +function gtLightningStrike(jsmesg) +{ + // Saftey check + if (g_mapSettings.strikes) + { + handleStrike(jsmesg); + } +} + function gtChatSystemInit() { g_gtEngineInterval = setInterval(gtChatStateMachine, 1000);