/// <summary> /// Disposes of or finalises the object. /// </summary> /// <param name="disposing"></param> protected virtual void Dispose(bool disposing) { if (disposing) { if (AircraftList != null) { if (AircraftList.PolarPlotter != null) { var polarPlotter = AircraftList.PolarPlotter; AircraftList.PolarPlotter = null; polarPlotter.Dispose(); } AircraftList.ExceptionCaught -= AircraftList_ExceptionCaught; AircraftList.Dispose(); AircraftList = null; } if (Listener != null) { Listener.ExceptionCaught -= Listener_ExceptionCaught; Listener.Dispose(); Listener = null; } } }
public void AddAircraft(Aircraft aircraft) { if (!AircraftList.Contains(aircraft)) { AircraftList.Add(aircraft); } }
public Aircraft CreateAircraft(GeoPoint position, int heading) { var ac = new Aircraft(position, heading, SimulationProperties); AircraftList.Add(ac); return(ac); }
/// <summary> /// See interface docs. /// </summary> /// <param name="receiver"></param> /// <param name="configuration"></param> public void ApplyConfiguration(Receiver receiver, Configuration configuration) { if (!_Initialised) { throw new InvalidOperationException("ApplyConfiguration cannot be called on an uninitialised feed"); } if (receiver == null) { throw new ArgumentNullException("receiver"); } if (configuration == null) { throw new ArgumentNullException("configuration"); } if (receiver.UniqueId != UniqueId) { throw new InvalidOperationException($"Cannot apply configuration for receiver #{receiver.UniqueId} to feed for receiver for #{UniqueId}"); } var receiverLocation = configuration.ReceiverLocation(receiver.ReceiverLocationId); var initialisedWithReceiver = (Listener as IMergedFeedListener) == null; if (!initialisedWithReceiver) { throw new InvalidOperationException("Feed {UniqueId} was initialised with a merged feed but updated with a receiver"); } var nameChanged = !String.IsNullOrEmpty(Name) && Name != receiver.Name; if (nameChanged) { SaveCurrentPolarPlot(); } Name = receiver.Name; ApplyReceiverListenerSettings(true, receiver, configuration, receiverLocation); if (receiver.ReceiverUsage == ReceiverUsage.MergeOnly) { AircraftList.Stop(); } else { AircraftList.Start(); } ConfigurePolarPlotter(receiverLocation, nameChanged); }
private void CheckForCollision() { foreach (var ac in AircraftList.ToList()) { foreach (var ac2 in AircraftList.ToList()) { if (ac == ac2) { break; } var distance = GeoPoint.GetDistance(ac.Position, ac2.Position); if (distance < 500) { OnCollision(ac, new CollisionEventArgs(ac2)); } } } }
/// <summary> /// Performs initialisation common to all Initialise methods. /// </summary> /// <param name="uniqueId"></param> /// <param name="name"></param> /// <param name="isSatcomFeed"></param> /// <param name="receiverUsage"></param> /// <param name="startAircraftList"></param> private void DoCommonInitialise(int uniqueId, string name, bool isSatcomFeed, ReceiverUsage receiverUsage, bool startAircraftList) { _Initialised = true; UniqueId = uniqueId; Name = name; Listener.ReceiverId = uniqueId; Listener.ReceiverName = Name; Listener.IsSatcomFeed = isSatcomFeed; AircraftList = Factory.Resolve <IBaseStationAircraftList>(); AircraftList.ExceptionCaught += AircraftList_ExceptionCaught; AircraftList.Listener = Listener; AircraftList.StandingDataManager = Factory.ResolveSingleton <IStandingDataManager>(); SetIsVisible(receiverUsage); if (startAircraftList) { AircraftList.Start(); } }
public async Task <AircraftList> DownloadAircraftList() { var downloadAddress = WEB_ADDRESS; using (var webClient = new WebClient()) { var response = await webClient.DownloadStringTaskAsync(downloadAddress).ConfigureAwait(false); dynamic responseData = JObject.Parse(response); var aircraftList = new AircraftList(); foreach (var report in responseData["states"]) { var positionReport = new PositionReport(); positionReport.TransponderIdentifier = report[0].ToString(); positionReport.Callsign = report[1].ToString(); positionReport.OriginCountry = report[2].ToString(); if (int.TryParse(report[3].ToString(), out int timePosition)) { positionReport.TimePosition = timePosition; } if (int.TryParse(report[4].ToString(), out int lastContact)) { positionReport.LastContact = lastContact; } if (double.TryParse(report[5].ToString(), out double longitude)) { positionReport.Longitude = longitude; } if (double.TryParse(report[6].ToString(), out double latitude)) { positionReport.Latitude = latitude; } if (decimal.TryParse(report[7].ToString(), out decimal altitudeInMeters)) { positionReport.AltitudeInMeters = altitudeInMeters; } if (bool.TryParse(report[8].ToString(), out bool onGround)) { positionReport.OnGround = onGround; } if (decimal.TryParse(report[9].ToString(), out decimal velocityInMetersPerSecond)) { positionReport.VelocityInMetersPerSecond = velocityInMetersPerSecond; } if (decimal.TryParse(report[10].ToString(), out decimal trueTrackDegrees)) { positionReport.TrueTrackDegrees = trueTrackDegrees; } if (decimal.TryParse(report[11].ToString(), out decimal verticalRateInMetersPerSecond)) { positionReport.VerticalRateInMetersPerSecond = verticalRateInMetersPerSecond; } if (decimal.TryParse(report[13].ToString(), out decimal geoAltitudeInMeters)) { positionReport.GeoAltitudeInMeters = geoAltitudeInMeters; } positionReport.Squawk = report[14].ToString(); aircraftList.Aircraft.Add(positionReport); } return(aircraftList); } }
public void Reset() { AircraftList.Clear(); }
public void RemoveAircraft(Aircraft aircaft) { AircraftList.Remove(aircaft); }