Example #1
0
        public void UpdateCounters()
        {
            if (_FeedId > -1)
            {
                var feed = _FeedManager.GetByUniqueId(_FeedId, ignoreInvisibleFeeds: false);
                Name = feed == null ? "" : feed.Name;
            }

            if (_ViewModel == null)
            {
                _ViewModel = new ViewModel(this);
            }
            else
            {
                _ViewModel.RefreshModel(this);
            }
        }
Example #2
0
        protected override bool DoHandleRequest(IWebServer server, RequestReceivedEventArgs args)
        {
            var result = false;

            if (args.PathAndFile.Equals("/PolarPlot.json", StringComparison.OrdinalIgnoreCase))
            {
                result = true;

                var allowRequest = _InternetClientCanShowPolarPlot || !args.IsInternetRequest;
                var feedId       = allowRequest ? QueryInt(args, "feedId", -1) : -1;
                var json         = new PolarPlotsJson()
                {
                    FeedId = feedId,
                };

                if (allowRequest)
                {
                    var feed         = _FeedManager.GetByUniqueId(feedId, ignoreInvisibleFeeds: true);
                    var polarPlotter = feed == null || feed.AircraftList == null ? null : feed.AircraftList.PolarPlotter;
                    if (polarPlotter != null)
                    {
                        foreach (var slice in polarPlotter.TakeSnapshot())
                        {
                            var jsonSlice = new PolarPlotsSliceJson()
                            {
                                StartAltitude  = slice.AltitudeLower,
                                FinishAltitude = slice.AltitudeHigher,
                            };
                            json.Slices.Add(jsonSlice);

                            foreach (var kvp in slice.PolarPlots.OrderBy(r => r.Key))
                            {
                                var plot = kvp.Value;
                                jsonSlice.Plots.Add(new PolarPlotJson()
                                {
                                    Latitude  = (float)plot.Latitude,
                                    Longitude = (float)plot.Longitude,
                                });
                            }
                        }
                    }
                }

                Responder.SendJson(args.Request, args.Response, json, null, null);
            }

            return(result);
        }
        /// <summary>
        /// See base class.
        /// </summary>
        /// <param name="server"></param>
        /// <param name="args"></param>
        /// <returns></returns>
        protected override bool DoHandleRequest(Interface.WebServer.IWebServer server, Interface.WebServer.RequestReceivedEventArgs args)
        {
            bool result = false;

            if ((!args.IsInternetRequest || _InternetClientCanRequestClosestAircraft) && args.PathAndFile.Equals("/ClosestAircraft.json", StringComparison.OrdinalIgnoreCase))
            {
                result = true;

                var latitude  = QueryNDouble(args, "lat");
                var longitude = QueryNDouble(args, "lng");

                var json = new ProximityGadgetAircraftJson();

                if (latitude == null || longitude == null)
                {
                    json.WarningMessage = "Position not supplied";
                }
                else
                {
                    var receiver = _ReceiverManager.GetByUniqueId(_ReceiverId, ignoreInvisibleFeeds: true);
                    if (receiver == null)
                    {
                        json.WarningMessage = "Receiver is offline";
                    }
                    else
                    {
                        var baseStationAircraftList = receiver.AircraftList;

                        long timeStamp, dataVersion;
                        var  aircraftList = baseStationAircraftList.TakeSnapshot(out timeStamp, out dataVersion);

                        IAircraft closestAircraft = null;
                        double?   closestDistance = null;

                        foreach (var aircraft in aircraftList)
                        {
                            double?distance = null;
                            if (aircraft.Latitude != null && aircraft.Longitude != null)
                            {
                                distance = GreatCircleMaths.Distance(latitude, longitude, aircraft.Latitude, aircraft.Longitude);
                                if (distance != null && closestAircraft == null || distance < closestDistance)
                                {
                                    closestAircraft = aircraft;
                                    closestDistance = distance;
                                }
                            }

                            if (aircraft.Emergency == true)
                            {
                                json.EmergencyAircraft.Add(CreateProximityGadgetClosestAircraftJson(aircraft, distance, latitude, longitude));
                            }
                        }

                        if (closestAircraft != null)
                        {
                            var closestJsonAircraft = CreateProximityGadgetClosestAircraftJson(closestAircraft, closestDistance, latitude, longitude);
                            json.ClosestAircraft = closestJsonAircraft;
                        }
                    }
                }

                Responder.SendJson(args.Request, args.Response, json, null, MimeType.Text);       // The proximity gagdet is expecting the text MIME type and will ignore JSON...
                args.Classification = ContentClassification.Json;
            }

            return(result);
        }
Example #4
0
 public void FeedManager_GetByUniqueId_Returns_Pathway_With_Matching_UniqueId()
 {
     _Manager.Initialise();
     Assert.AreSame(_CreatedFeeds[0].Object, _Manager.GetByUniqueId(_Receiver1.UniqueId, false));
 }
        /// <summary>
        /// Returns a fully-formed <see cref="AircraftListJson"/> from the aircraft list passed across.
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        public AircraftListJson Build(AircraftListJsonBuilderArgs args)
        {
            if (args == null)
            {
                throw new ArgumentNullException("args");
            }

            RefreshConfigurationSettings();

            var feedId = args.SourceFeedId == -1 ? _DefaultAircraftListFeedId : args.SourceFeedId;

            IAircraftList aircraftList = null;

            if (args.IsFlightSimulatorList)
            {
                aircraftList = args.AircraftList;
            }
            else
            {
                var selectedFeed = _FeedManager.GetByUniqueId(feedId, ignoreInvisibleFeeds: true);
                if (selectedFeed == null)
                {
                    feedId       = _DefaultAircraftListFeedId;
                    selectedFeed = _FeedManager.GetByUniqueId(feedId, ignoreInvisibleFeeds: true);
                }
                aircraftList = selectedFeed == null ? null : selectedFeed.AircraftList;
            }
            if (aircraftList == null)
            {
                aircraftList = _EmptyAircraftList;
                feedId       = args.SourceFeedId;
            }

            var result = new AircraftListJson()
            {
                FlagHeight              = 20,
                FlagWidth               = 85,
                ShowFlags               = _ShowFlags && !args.IsFlightSimulatorList,
                ShowPictures            = _ShowPictures && (!args.IsInternetClient || _ShowPicturesToInternetClients) && !args.IsFlightSimulatorList,
                ShowSilhouettes         = _ShowSilhouettes && !args.IsFlightSimulatorList,
                ShortTrailLengthSeconds = _ShortTrailLength,
                Source       = (int)aircraftList.Source,
                SourceFeedId = feedId,
            };

            if (!args.FeedsNotRequired)
            {
                foreach (var feed in _FeedManager.VisibleFeeds)
                {
                    result.Feeds.Add(new FeedJson()
                    {
                        UniqueId     = feed.UniqueId,
                        Name         = feed.Name,
                        HasPolarPlot = feed.AircraftList != null && feed.AircraftList.PolarPlotter != null
                    });
                }
            }

            long timestamp, dataVersion;
            var  aircraft = aircraftList.TakeSnapshot(out timestamp, out dataVersion);

            result.AvailableAircraft = aircraft.Count;

            if (args.IgnoreUnchanged)
            {
                aircraft = aircraft.Where(r => r.DataVersion > args.PreviousDataVersion).ToList();
            }

            result.LastDataVersion = dataVersion.ToString();
            result.ServerTime      = JavascriptHelper.ToJavascriptTicks(timestamp);

            Dictionary <int, double?> distances = new Dictionary <int, double?>();

            aircraft = FilterAircraft(aircraft, args, distances);
            SortAircraft(aircraft, args, distances);
            CopyAircraft(result, aircraft, args, distances);

            return(result);
        }