private async void FlightConnector_AircraftStatusUpdated(object sender, AircraftStatusUpdatedEventArgs e) { if (viewModel.IsTracking) { e.AircraftStatus.Callsign = viewModel.Callsign; e.AircraftStatus.TransponderMode = viewModel.TransponderIdent ? TransponderMode.Ident : TransponderMode.ModeC; if (hub?.ConnectionId != null && DateTime.Now - lastStatusSent > TimeSpan.FromMilliseconds(MinimumUpdatePeriod)) { route.Add(new AircraftStatusBrief(e.AircraftStatus)); lastStatusSent = DateTime.Now; await hub.SendAsync("UpdateAircraft", e.AircraftStatus); lastStatusSent = DateTime.Now; if (viewModel.TransponderIdent) { viewModel.TransponderIdent = false; } } viewModel.AircraftStatus = e.AircraftStatus; try { if (viewModel.BroadcastUDP) { await udpBroadcastLogic.SendGpsAsync(e.AircraftStatus); await udpBroadcastLogic.SendAttitudeAsync(e.AircraftStatus); } } catch (Exception ex) { logger.LogError(ex, "Cannot send network package!"); } } }
private async void FlightConnector_AircraftStatusUpdated(object sender, AircraftStatusUpdatedEventArgs e) { if (viewModel.IsTracking) { e.AircraftStatus.Callsign = viewModel.Callsign; e.AircraftStatus.TransponderMode = viewModel.TransponderIdent ? TransponderMode.Ident : TransponderMode.ModeC; if (DateTime.Now - lastStatusSent > TimeSpan.FromMilliseconds(MinimumUpdatePeriod)) { if (hub?.ConnectionId != null) { route.Add(new AircraftStatusBrief(e.AircraftStatus)); lastStatusSent = DateTime.Now; await hub.SendAsync("UpdateAircraft", e.AircraftStatus); lastStatusSent = DateTime.Now; if (viewModel.TransponderIdent) { viewModel.TransponderIdent = false; } } var stopwatch = new Stopwatch(); stopwatch.Start(); var minDistance = 0d; Airport minAirport = null; foreach (var airport in airports.Values) { var distance = GpsHelper.CalculateDistance(e.AircraftStatus.Latitude, e.AircraftStatus.Longitude, airport.Latitude, airport.Longitude); if (minAirport == null || minDistance > distance) { minDistance = distance; minAirport = airport; } } if (minAirport != null) { viewModel.NearestAirport = minAirport; } //Debug.WriteLine($"Found closest airport in {stopwatch.ElapsedMilliseconds}ms"); stopwatch.Stop(); } viewModel.AircraftStatus = e.AircraftStatus; try { if (viewModel.BroadcastUDP) { await udpBroadcastLogic.SendGpsAsync(e.AircraftStatus); await udpBroadcastLogic.SendAttitudeAsync(e.AircraftStatus); } } catch (Exception ex) { logger.LogError(ex, "Cannot send network package!"); } } }