示例#1
0
        private static void DownloadMetarForHamburgSynchronically()
        {
            Console.WriteLine("Downloading metar - synchro...");

            // here will be the result
            string eddhMetar;

            // this specifies the downloader - from where and how the metar will be downloaded.
            ENG.WMOCodes.Downloaders.Retrievers.Metar.NoaaGovRetriever retriever =
                new ENG.WMOCodes.Downloaders.Retrievers.Metar.NoaaGovRetriever();

            try
            {
                // synchronously download the metar, parameters are
                // 1) which airport; 2) from which source
                eddhMetar = ENG.WMOCodes.Downloaders.Downloader.Download("EDDH", retriever);

                Console.WriteLine("Metar for Hamburg is: ");
                Console.WriteLine(eddhMetar);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error occurs. Description: " + ex.Message);
            }

            Console.ReadKey();
        }
示例#2
0
        private void btnAsyncDown_Click(object sender, EventArgs e)
        {
            AddInfo("Downloading metar/taf - asynchro...");

            // this specifies the downloaders - from where and how the metar/taf will be downloaded.
            // starting with METAR first
            ENG.WMOCodes.Downloaders.Retrievers.Metar.NoaaGovRetriever retriever =
                new ENG.WMOCodes.Downloaders.Retrievers.Metar.NoaaGovRetriever();


            ENG.WMOCodes.Downloaders.Downloader.DownloadAsync(
                txtIcao.Text,
                retriever,
                new ENG.WMOCodes.Downloaders.Downloader.DownloadCompletedDelegate(OnMetarCompleted));

            // now get the TAF
            ENG.WMOCodes.Downloaders.Retrievers.Taf.NoaaGovRetriever tRetriever =
                new ENG.WMOCodes.Downloaders.Retrievers.Taf.NoaaGovRetriever();


            ENG.WMOCodes.Downloaders.Downloader.DownloadAsync(
                txtIcao.Text,
                tRetriever,
                new ENG.WMOCodes.Downloaders.Downloader.DownloadCompletedDelegate(OnTafCompleted));


            AddInfo("... asynchro request send, waiting for result.");
        }
示例#3
0
        private void btnSyncDown_Click(object sender, EventArgs e)
        {
            AddInfo("Starting sync download");

            string metar;
            string taf;

            // this specifies the downloader - from where and how the metar will be downloaded.
            ENG.WMOCodes.Downloaders.Retrievers.Metar.NoaaGovRetriever mRetriever =
                new ENG.WMOCodes.Downloaders.Retrievers.Metar.NoaaGovRetriever();

            ENG.WMOCodes.Downloaders.Retrievers.Taf.NoaaGovRetriever tRetriever =
                new ENG.WMOCodes.Downloaders.Retrievers.Taf.NoaaGovRetriever();

            try
            {
                // synchronously download the metar, parameters are
                // 1) which airport; 2) from which source
                metar = ENG.WMOCodes.Downloaders.Downloader.Download(
                    txtIcao.Text.Trim(), mRetriever);

                taf = ENG.WMOCodes.Downloaders.Downloader.Download(
                    txtIcao.Text.Trim(), tRetriever);

                txtMetar.Text = metar;
                txtTaf.Text   = taf;

                AddInfo("... downloaded");
            }
            catch (Exception ex)
            {
                AddInfo("Sync download failed - " + ex.GetMessages());
            }
        }
示例#4
0
        private static void DownloadMetarForHamburgAsynchronically()
        {
            Console.WriteLine("Downloading metar - asynchro...");

            // this specifies the downloader - from where and how the metar will be downloaded.
            ENG.WMOCodes.Downloaders.Retrievers.Metar.NoaaGovRetriever retriever =
                new ENG.WMOCodes.Downloaders.Retrievers.Metar.NoaaGovRetriever();

            ENG.WMOCodes.Downloaders.Downloader.DownloadAsync(
                "EDDH",
                retriever,
                new ENG.WMOCodes.Downloaders.Downloader.DownloadCompletedDelegate(OnCompleted));

            // do something other interesting stuff
        }
示例#5
0
        public async Task <Metar> GetMetarAsync(string icao, bool invalidateCache)
        {
            var ret = new Metar();

            var cacheHit = this.Cache.Keys.Contains(icao);

            if (cacheHit)
            {
                this.Cache[icao] = ret;
            }
            else
            {
                this.Cache.Add(icao, ret);
            }

            var needDownload = !cacheHit ||
                               invalidateCache ||
                               (cacheHit && !this.Cache[icao].IsValid) ||
                               (cacheHit && this.Cache[icao].TimePublished - DateTime.Now < TimeSpan.FromHours(1));

            if (!needDownload)
            {
                ret = this.Cache[icao];
            }
            else
            {
                var retriever = new ENG.WMOCodes.Downloaders.Retrievers.Metar.NoaaGovRetriever();
                var result    = await Downloader.DownloadAsync(icao, retriever);

                if (!result.IsSuccessful)
                {
                    ret.IsValid  = false;
                    ret.MetarObj = null;
                }
                else
                {
                    var decoder = new ENG.WMOCodes.Decoders.MetarDecoder();
                    ENG.WMOCodes.Codes.Metar metar = null;

                    try
                    {
                        metar = decoder.Decode(result.Result);
                    }
                    catch (ENG.WMOCodes.Decoders.Internal.DecodeException)
                    {
                    }

                    ret.Raw = result.Result;

                    if (metar == null)
                    {
                        ret.IsValid = false;
                    }
                    else
                    {
                        ret.IsValid         = true;
                        ret.DewPoint        = metar.DewPoint;
                        ret.Temperature     = metar.Temperature;
                        ret.Visibility      = (int)metar.Visibility.Distance;
                        ret.Wind            = new Wind();
                        ret.Wind.IsVariable = metar.Wind.IsVariable;
                        if (!metar.Wind.IsVariable)
                        {
                            ret.Wind.Direction = metar.Wind.Direction.Value;
                        }

                        ret.Wind.Speed = metar.Wind.Speed.Value;

                        var layers = new List <CloudLayer>();
                        foreach (var cl in metar.Clouds)
                        {
                            var layer = new CloudLayer();
                            layer.Altitude = cl.Altitude * 100;
                            switch (cl.Type)
                            {
                            case ENG.WMOCodes.Types.Cloud.eType.FEW:
                                layer.Type      = CloudLayerType.FEW;
                                layer.IsCeiling = false;
                                break;

                            case ENG.WMOCodes.Types.Cloud.eType.SCT:
                                layer.Type      = CloudLayerType.SCT;
                                layer.IsCeiling = false;
                                break;

                            case ENG.WMOCodes.Types.Cloud.eType.BKN:
                                layer.Type      = CloudLayerType.BKN;
                                layer.IsCeiling = true;
                                break;

                            case ENG.WMOCodes.Types.Cloud.eType.OVC:
                                layer.Type      = CloudLayerType.OVC;
                                layer.IsCeiling = true;
                                break;
                            }

                            layers.Add(layer);
                        }

                        ret.Clouds   = layers;
                        ret.MetarObj = metar;

                        ret.ComputeFlightRules();
                    }
                }
            }

            return(ret);
        }
示例#6
0
        public async Task<Metar> GetMetarAsync(string icao, bool invalidateCache)
        {
            var ret = new Metar();

            var cacheHit = this.Cache.Keys.Contains(icao);

            if (cacheHit)
            {
                this.Cache[icao] = ret;
            }
            else
            {
                this.Cache.Add(icao, ret);
            }

            var needDownload = !cacheHit
                               || invalidateCache
                               || (cacheHit && !this.Cache[icao].IsValid)
                               || (cacheHit && this.Cache[icao].TimePublished - DateTime.Now < TimeSpan.FromHours(1));

            if (!needDownload)
            {
                ret = this.Cache[icao];
            }
            else
            {
                var retriever = new ENG.WMOCodes.Downloaders.Retrievers.Metar.NoaaGovRetriever();
                var result = await Downloader.DownloadAsync(icao, retriever);
                
                if (!result.IsSuccessful)
                {
                    ret.IsValid = false;
                    ret.MetarObj = null;
                }
                else
                {
                    var decoder = new ENG.WMOCodes.Decoders.MetarDecoder();
                    ENG.WMOCodes.Codes.Metar metar = null;

                    try
                    {
                        metar = decoder.Decode(result.Result);
                    }
                    catch (ENG.WMOCodes.Decoders.Internal.DecodeException)
                    {

                    }

                    ret.Raw = result.Result;

                    if (metar == null)
                    {
                        ret.IsValid = false;
                    }
                    else
                    {
                        ret.IsValid = true;
                        ret.DewPoint = metar.DewPoint;
                        ret.Temperature = metar.Temperature;
                        ret.Visibility = (int)metar.Visibility.Distance;
                        ret.Wind = new Wind();
                        ret.Wind.IsVariable = metar.Wind.IsVariable;
                        if (!metar.Wind.IsVariable)
                        {
                            ret.Wind.Direction = metar.Wind.Direction.Value;
                        }

                        ret.Wind.Speed = metar.Wind.Speed.Value;

                        var layers = new List<CloudLayer>();
                        foreach (var cl in metar.Clouds)
                        {
                            var layer = new CloudLayer();
                            layer.Altitude = cl.Altitude * 100;
                            switch (cl.Type)
                            {
                                case ENG.WMOCodes.Types.Cloud.eType.FEW:
                                    layer.Type = CloudLayerType.FEW;
                                    layer.IsCeiling = false;
                                    break;
                                case ENG.WMOCodes.Types.Cloud.eType.SCT:
                                    layer.Type = CloudLayerType.SCT;
                                    layer.IsCeiling = false;
                                    break;
                                case ENG.WMOCodes.Types.Cloud.eType.BKN:
                                    layer.Type = CloudLayerType.BKN;
                                    layer.IsCeiling = true;
                                    break;
                                case ENG.WMOCodes.Types.Cloud.eType.OVC:
                                    layer.Type = CloudLayerType.OVC;
                                    layer.IsCeiling = true;
                                    break;
                            }

                            layers.Add(layer);
                        }

                        ret.Clouds = layers;
                        ret.MetarObj = metar;

                        ret.ComputeFlightRules();
                    }
                }
            }

            return ret;
        }