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(); }
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."); }
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()); } }
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 }
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); }
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; }