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); } }
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); }
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); }