Exemplo n.º 1
0
        /// <summary>
        /// See interface docs.
        /// </summary>
        public void Initialise(IWebSiteProvider provider)
        {
            if (provider == null)
            {
                throw new ArgumentNullException("provider");
            }
            Provider = provider;

            _SharedConfiguration = Factory.Singleton.Resolve <ISharedConfiguration>().Singleton;
            _FeedManager         = Factory.Singleton.Resolve <IFeedManager>().Singleton;
            _EmptyAircraftList   = Factory.Singleton.Resolve <ISimpleAircraftList>();
        }
Exemplo n.º 2
0
        /// <summary>
        /// See interface docs.
        /// </summary>
        private void Initialise()
        {
            if (!_Initialised)
            {
                _Initialised = true;

                _SharedConfiguration = Factory.ResolveSingleton <ISharedConfiguration>();
                _FeedManager         = Factory.ResolveSingleton <IFeedManager>();
                _EmptyAircraftList   = Factory.Resolve <ISimpleAircraftList>();
                _FileSystemProvider  = Factory.Resolve <IFileSystemProvider>();
                _Clock = Factory.Resolve <IClock>();
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Sends the appropriate AircraftList.json content in response to the request passed across.
        /// </summary>
        /// <param name="args"></param>
        /// <param name="aircraftList"></param>
        /// <param name="isFlightSimulator"></param>
        /// <returns>Always returns true - this just helps to make the caller's code a little more compact.</returns>
        private bool HandleAircraftListJson(RequestReceivedEventArgs args, IAircraftList aircraftList, bool isFlightSimulator)
        {
            if (_Builder == null)
            {
                _Builder = new AircraftListJsonBuilder(Provider);
            }

            if (aircraftList == null)
            {
                args.Response.StatusCode = HttpStatusCode.InternalServerError;
            }
            else
            {
                var buildArgs = ConstructBuildArgs(args, aircraftList, isFlightSimulator);
                var json      = _Builder.Build(buildArgs);

                Responder.SendJson(args.Response, json, args.QueryString["callback"]);
                args.Classification = ContentClassification.Json;
            }

            return(true);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Creates an object that holds all of the aircraft list arguments that were extracted from the request.
        /// </summary>
        /// <param name="args"></param>
        /// <param name="feedId"></param>
        /// <param name="aircraftList"></param>
        /// <param name="isFlightSimulator"></param>
        /// <returns></returns>
        private AircraftListJsonBuilderArgs ConstructBuildArgs(RequestReceivedEventArgs args, int feedId, IAircraftList aircraftList, bool isFlightSimulator)
        {
            var result = new AircraftListJsonBuilderArgs()
            {
                AircraftList          = aircraftList,
                BrowserLatitude       = QueryNDouble(args, "lat"),
                BrowserLongitude      = QueryNDouble(args, "lng"),
                Filter                = isFlightSimulator ? null : ConstructFilter(args),
                IsFlightSimulatorList = isFlightSimulator,
                IsInternetClient      = args.IsInternetRequest,
                PreviousDataVersion   = QueryLong(args, "ldv", -1),
                ServerTimeTicks       = QueryLong(args, "stm", -1),
                ResendTrails          = QueryString(args, "refreshTrails", false) == "1",
                SelectedAircraftId    = QueryInt(args, "selAc", -1),
                SourceFeedId          = feedId,
            };

            var trFmt = QueryString(args, "trFmt", true);

            if (!String.IsNullOrEmpty(trFmt))
            {
                switch (trFmt)
                {
                case "F":       result.TrailType = TrailType.Full; break;

                case "FA":      result.TrailType = TrailType.FullAltitude; break;

                case "FS":      result.TrailType = TrailType.FullSpeed; break;

                case "S":       result.TrailType = TrailType.Short; break;

                case "SA":      result.TrailType = TrailType.ShortAltitude; break;

                case "SS":      result.TrailType = TrailType.ShortSpeed; break;
                }
            }

            for (int sortColumnCount = 0; sortColumnCount < 2; ++sortColumnCount)
            {
                var sortColumn = QueryString(args, String.Format("sortBy{0}", sortColumnCount + 1), true);
                var sortOrder  = QueryString(args, String.Format("sortOrder{0}", sortColumnCount + 1), true);
                if (String.IsNullOrEmpty(sortColumn) || String.IsNullOrEmpty(sortOrder))
                {
                    break;
                }
                result.SortBy.Add(new KeyValuePair <string, bool>(sortColumn, sortOrder == "ASC"));
            }
            if (result.SortBy.Count == 0)
            {
                result.SortBy.Add(new KeyValuePair <string, bool>(AircraftComparerColumn.FirstSeen, false));
            }

            if ((args.Request.HttpMethod ?? "").ToUpper() == "POST")
            {
                ExtractPreviousAircraftIdsFromPostBody(args.Request, result.PreviousAircraft);
            }
            else
            {
                ExtractPreviousAircraftIdsFromHeader(args.Request, result.PreviousAircraft);
            }

            return(result);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Sends the appropriate AircraftList.json content in response to the request passed across.
        /// </summary>
        /// <param name="args"></param>
        /// <param name="feedId"></param>
        /// <param name="aircraftList"></param>
        /// <param name="isFlightSimulator"></param>
        /// <returns>Always returns true - this just helps to make the caller's code a little more compact.</returns>
        private bool HandleAircraftListJson(RequestReceivedEventArgs args, int feedId, IAircraftList aircraftList, bool isFlightSimulator)
        {
            if (_Builder == null)
            {
                _Builder = Factory.Singleton.Resolve <IAircraftListJsonBuilder>();
                _Builder.Initialise(Provider);
            }

            var buildArgs = ConstructBuildArgs(args, feedId, aircraftList, isFlightSimulator);
            var json      = _Builder.Build(buildArgs);

            if (buildArgs.ServerTimeTicks > -1 && buildArgs.ServerTimeTicks <= _ConfigurationChangedTick)
            {
                json.ServerConfigChanged = true;
            }

            Responder.SendJson(args.Request, args.Response, json, args.QueryString["callback"], null);
            args.Classification = ContentClassification.Json;

            return(true);
        }
Exemplo n.º 6
0
        /// <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);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Creates an object that holds all of the aircraft list arguments that were extracted from the request.
        /// </summary>
        /// <param name="args"></param>
        /// <param name="aircraftList"></param>
        /// <param name="isFlightSimulator"></param>
        /// <returns></returns>
        private AircraftListJsonBuilderArgs ConstructBuildArgs(RequestReceivedEventArgs args, IAircraftList aircraftList, bool isFlightSimulator)
        {
            var result = new AircraftListJsonBuilderArgs()
            {
                AircraftList          = aircraftList,
                BrowserLatitude       = QueryNDouble(args, "lat"),
                BrowserLongitude      = QueryNDouble(args, "lng"),
                Filter                = isFlightSimulator ? null : ConstructFilter(args),
                IsFlightSimulatorList = isFlightSimulator,
                IsInternetClient      = args.IsInternetRequest,
                PreviousDataVersion   = QueryLong(args, "ldv", -1),
                ResendTrails          = QueryString(args, "refreshTrails", false) == "1",
                ShowShortTrail        = QueryString(args, "trFmt", true) == "S",
            };

            for (int sortColumnCount = 0; sortColumnCount < 2; ++sortColumnCount)
            {
                var sortColumn = QueryString(args, String.Format("sortBy{0}", sortColumnCount + 1), true);
                var sortOrder  = QueryString(args, String.Format("sortOrder{0}", sortColumnCount + 1), true);
                if (String.IsNullOrEmpty(sortColumn) || String.IsNullOrEmpty(sortOrder))
                {
                    break;
                }
                result.SortBy.Add(new KeyValuePair <string, bool>(sortColumn, sortOrder == "ASC"));
            }
            if (result.SortBy.Count == 0)
            {
                result.SortBy.Add(new KeyValuePair <string, bool>(AircraftComparerColumn.FirstSeen, false));
            }

            var previousAircraftIds = args.Request.Headers["X-VirtualRadarServer-AircraftIds"];

            if (!String.IsNullOrEmpty(previousAircraftIds))
            {
                var decodedPreviousAircraftIds = HttpUtility.UrlDecode(previousAircraftIds);
                foreach (var chunk in decodedPreviousAircraftIds.Split(','))
                {
                    int id;
                    if (int.TryParse(chunk, out id))
                    {
                        result.PreviousAircraft.Add(id);
                    }
                }
            }

            return(result);
        }
        /// <summary>
        /// Creates an object that holds all of the aircraft list arguments that were extracted from the request.
        /// </summary>
        /// <param name="args"></param>
        /// <param name="aircraftList"></param>
        /// <param name="isFlightSimulator"></param>
        /// <returns></returns>
        private AircraftListJsonBuilderArgs ConstructBuildArgs(RequestReceivedEventArgs args, IAircraftList aircraftList, bool isFlightSimulator)
        {
            var result = new AircraftListJsonBuilderArgs() {
                AircraftList =          aircraftList,
                BrowserLatitude =       QueryNDouble(args, "lat"),
                BrowserLongitude =      QueryNDouble(args, "lng"),
                Filter =                isFlightSimulator ? null : ConstructFilter(args),
                IsFlightSimulatorList = isFlightSimulator,
                IsInternetClient =      args.IsInternetRequest,
                PreviousDataVersion =   QueryLong(args, "ldv", -1),
                ResendTrails =          QueryString(args, "refreshTrails", false) == "1",
                ShowShortTrail =        QueryString(args, "trFmt", true) == "S",
            };

            for(int sortColumnCount = 0;sortColumnCount < 2;++sortColumnCount) {
                var sortColumn = QueryString(args, String.Format("sortBy{0}", sortColumnCount + 1), true);
                var sortOrder = QueryString(args, String.Format("sortOrder{0}", sortColumnCount + 1), true);
                if(String.IsNullOrEmpty(sortColumn) || String.IsNullOrEmpty(sortOrder)) break;
                result.SortBy.Add(new KeyValuePair<string,bool>(sortColumn, sortOrder == "ASC"));
            }
            if(result.SortBy.Count == 0) result.SortBy.Add(new KeyValuePair<string,bool>(AircraftComparerColumn.FirstSeen, false));

            var previousAircraftIds = args.Request.Headers["X-VirtualRadarServer-AircraftIds"];
            if(!String.IsNullOrEmpty(previousAircraftIds)) {
                var decodedPreviousAircraftIds = HttpUtility.UrlDecode(previousAircraftIds);
                foreach(var chunk in decodedPreviousAircraftIds.Split(',')) {
                    int id;
                    if(int.TryParse(chunk, out id)) result.PreviousAircraft.Add(id);
                }
            }

            return result;
        }
        /// <summary>
        /// Sends the appropriate AircraftList.json content in response to the request passed across.
        /// </summary>
        /// <param name="args"></param>
        /// <param name="aircraftList"></param>
        /// <param name="isFlightSimulator"></param>
        /// <returns>Always returns true - this just helps to make the caller's code a little more compact.</returns>
        private bool HandleAircraftListJson(RequestReceivedEventArgs args, IAircraftList aircraftList, bool isFlightSimulator)
        {
            if(_Builder == null) _Builder = new AircraftListJsonBuilder(Provider);

            if(aircraftList == null) args.Response.StatusCode = HttpStatusCode.InternalServerError;
            else {
                var buildArgs = ConstructBuildArgs(args, aircraftList, isFlightSimulator);
                var json = _Builder.Build(buildArgs);

                Responder.SendJson(args.Response, json, args.QueryString["callback"]);
                args.Classification = ContentClassification.Json;
            }

            return true;
        }