Example #1
0
        static async Task Main()
        {
            var loader   = new LoadExchangeProviders("plugins");
            var exchange = loader.LoadExchange().ToArray();

            Console.WriteLine($"plugin number: {exchange.Length}");
            var l = new List <Task <ExchangeRates[]> >();

            for (int i = 0; i < exchange.Length; i++)
            {
                l.Add(Rates(exchange[i]));
            }

            var all = new List <ExchangeRates>();

            while (l.Count > 0)
            {
                var x = l.ToArray();

                var data = await Task.WhenAny(x);

                ShowValues(await data);
                all.AddRange(await data);
                l.Remove(data);
            }

            // in case of dotnet try, comment this line
            DisplayGui(all.ToArray());
        }
Example #2
0
        public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log, ExecutionContext context)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");
            try
            {
                await Task.Delay(100);

                log.LogInformation($"### OK trigger function executed at: {DateTime.Now}  ");
                var folder = Path.Combine(context.FunctionDirectory, "plugins");
                log.LogInformation($"###  Folder {folder} Folder exists: {Directory.Exists(folder)}");

                folder = Path.Combine(context.FunctionAppDirectory, "plugins");
                log.LogInformation($"### Folder {folder} Folder exists: {Directory.Exists(folder)}");
                var loader   = new LoadExchangeProviders(folder);
                var exchange = loader.LoadExchange().ToArray();
                log.LogInformation($"### plugin number: {exchange.Length}");
                return(new OkObjectResult($"Hello"));
            }
            catch (Exception ex)
            {
                log.LogError("ERROR! " + ex.Message);
                log.LogError("!!!" + ex.StackTrace);
                throw;
            }
            //string name = req.Query["name"];

            //string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            //dynamic data = JsonConvert.DeserializeObject(requestBody);
            //name = name ?? data?.name;

            //return name != null
            //    ? (ActionResult)new OkObjectResult($"Hello, {name}")
            //    : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
        }
        public async Task <ResultsLoadBankData[]> LoadAndSave()
        {
            var items = providers.Banks().Select(it =>
                                                 new KeyValuePair <string, ResultsLoadBankData>(it,
                                                                                                new ResultsLoadBankData()
            {
                Bank            = it,
                ErrorMessage    = "error loading",
                HasSuccess      = false,
                NrRecordsSaved  = 0,
                NrRecordsLoaded = -1
            })
                                                 );;
            var lst = new Dictionary <string, ResultsLoadBankData>(items);


            var rates =
                providers.LoadExchange()
                .Select(it => it.GetActualRates())
                .ToArray();
            //TODO: how to load async all async enumerables?
            //TODO: how to report error if one fails?
            var allRates = new List <ExchangeRates>();

            foreach (var rateAsync in rates)
            {
                try
                {
                    var ratesBank = await rateAsync;
                    allRates.AddRange(ratesBank);
                }
                catch (Exception)
                {
                }
            }
            var groups = allRates.GroupBy(it => it.Bank).ToDictionary(it => it.Key, it => it.ToArray());

            foreach (var bank in groups.Keys)
            {
                var item = lst[bank];
                item.HasSuccess      = true;
                item.ErrorMessage    = null;
                item.NrRecordsLoaded = groups[bank].Length;
                item.NrRecordsSaved  = 0;
                foreach (var rate in groups[bank])
                {
                    try
                    {
                        if (await ret.Exists(rate))
                        {
                            continue;
                        }
                        var nr = await save.Save(rate);

                        item.NrRecordsSaved++;
                    }
                    catch (Exception ex)
                    {
                        //TODO:log
                        item.ErrorMessage = ex.Message;
                        item.HasSuccess   = false;
                    }
                }
            }


            return(lst.Values.ToArray());
        }