/// <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 { 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.Response, json, null); args.Classification = ContentClassification.Json; } return(result); }
/// <summary> /// Proxies requests for airport-data.com data. /// </summary> /// <param name="server"></param> /// <param name="args"></param> /// <returns></returns> protected override bool DoHandleRequest(Interface.WebServer.IWebServer server, Interface.WebServer.RequestReceivedEventArgs args) { var result = false; if (args.PathAndFile.Equals("/AirportDataThumbnails.json", StringComparison.OrdinalIgnoreCase)) { result = true; var icao = QueryIcao(args, "icao"); var registration = QueryString(args, "reg", true); var maxThumbnails = QueryInt(args, "numThumbs", 1); AirportDataThumbnailsJson json; if (icao == null) { json = new AirportDataThumbnailsJson() { Error = "Invalid ICAO" } } ; else { try { var response = _AirportDataApi.GetThumbnails(icao, registration, maxThumbnails); if (response.Result == null) { json = new AirportDataThumbnailsJson() { Status = (int)response.HttpStatusCode, Error = "Could not retrieve thumbnails", } } ; else { json = response.Result; } } catch (Exception ex) { json = new AirportDataThumbnailsJson() { Status = 500, Error = String.Format("Exception caught while fetching thumbnails: {0}", ex.Message), }; } } Responder.SendJson(args.Request, args.Response, json, null, null); } return(result); }