public async Task <bool> GenerateProximityAlerts() { //bool IsProximityWarning = false; //bool IsProximityCritical = false; List <Alert> Alerts = new List <Alert>(); lock (_lockProximity) { int[] Keys = Proximities.Keys.ToArray(); foreach (int Key in Keys) { Proximity Item = Proximities[Key]; bool _IsProximityWarning = false; bool _IsProximityCritical = false; Console.WriteLine($"Key: {Key}, Distance: {Item.Distance}"); if (Item.Distance < 1000) { _IsProximityCritical = true; } else if (Item.Distance < 2000) { _IsProximityWarning = true; } if (_IsProximityWarning && !Item.IsProximityWarning) { //Generate Alert for the proximity var ThisAlert = new Alert(_ExtDroneFlight); ThisAlert.Generate("Proximity", "High", Item); Alerts.Add(ThisAlert); IsAlertedProximityWarning = true; } if (_IsProximityCritical && !Item.IsProximityCritical) { //Generate Alert for proximity Ctitical var ThisAlert = new Alert(_ExtDroneFlight); ThisAlert.Generate("Proximity", "Critical", Item); Alerts.Add(ThisAlert); IsAlertedProximityCritical = true; } Item.IsProximityWarning = _IsProximityWarning; Item.IsProximityCritical = _IsProximityCritical; } //foreach(Proximity Item in Proximities) } //lock (_lockProximity) foreach (Alert ThisAlert in Alerts) { await ThisAlert.Save(); } _DroneFlight.ProximityCritical = IsAlertedProximityCritical ? 1 : 0; _DroneFlight.ProximityWarning = IsAlertedProximityWarning ? 1 : 0; return(true); }
public bool Generate(String AlertCategory, String AlertType = "High", Proximity ProximityFlight = null) { bool IsMessageGenerated = false; String sAltitude = ((Decimal)(_Flight.Altitude)).ToString("0.00"); String sFlightTime = ((DateTime)_Flight.GetBase().FlightDate).ToString("dd-MMM-yyyy HH:mm:ss"); _AlertCategory = AlertCategory; _AlertType = AlertType; switch (AlertCategory.ToLower()) { case "boundary": case "altitude": _AlertMessage = AlertCategory + "\n" + _AccountName + "\n" + _Flight.PilotName + "\n" + GetLocation() + "\n" + "Altitude: " + sAltitude + " Meter\n" + "UTC " + sFlightTime + "\n" + "Ref: " + _Flight.GetBase().ID; IsMessageGenerated = true; break; case "proximity": _AlertMessage = AlertCategory + Environment.NewLine + _AccountName + Environment.NewLine + _Flight.PilotName + Environment.NewLine + _DroneName + Environment.NewLine + GetLocation() + Environment.NewLine + "Altitude: " + sAltitude + " Meter" + Environment.NewLine + "Ref: " + _Flight.GetBase().ID.ToString() + Environment.NewLine + Environment.NewLine + ProximityFlight.AccountName + Environment.NewLine + ProximityFlight.PilotName + Environment.NewLine + ProximityFlight.DroneName + Environment.NewLine + ProximityFlight.Location + Environment.NewLine + "Altitude: " + sAltitude + " Meter" + Environment.NewLine + "Ref: " + ProximityFlight.FlightID.ToString() + Environment.NewLine + Environment.NewLine + "Distance: " + ProximityFlight.Distance.ToString("0.00") + Environment.NewLine + "UTC " + sFlightTime; IsMessageGenerated = true; break; } return(IsMessageGenerated); }//public String GetAlert
}//public void ProximityRemove public void ProximityAdd(Proximity ThisProximity) { int Key = ThisProximity.FlightID; if (!Proximities.ContainsKey(Key)) { lock (_lockProximity) { Proximities.Add(Key, ThisProximity); } } else { Proximities[Key].Distance = ThisProximity.Distance; Proximities[Key].Lat = ThisProximity.Lat; Proximities[Key].Lng = ThisProximity.Lng; } }