Beispiel #1
0
        /// <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;
                }
            }
        }
Beispiel #2
0
 public void AddAircraft(Aircraft aircraft)
 {
     if (!AircraftList.Contains(aircraft))
     {
         AircraftList.Add(aircraft);
     }
 }
Beispiel #3
0
        public Aircraft CreateAircraft(GeoPoint position, int heading)
        {
            var ac = new Aircraft(position, heading, SimulationProperties);

            AircraftList.Add(ac);

            return(ac);
        }
Beispiel #4
0
        /// <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);
        }
Beispiel #5
0
        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));
                    }
                }
            }
        }
Beispiel #6
0
        /// <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);
            }
        }
Beispiel #8
0
 public void Reset()
 {
     AircraftList.Clear();
 }
Beispiel #9
0
 public void RemoveAircraft(Aircraft aircaft)
 {
     AircraftList.Remove(aircaft);
 }