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