public SubstitutionsMonitor(IEnumerable <ISubstitutionProvider> providers, ISubstitutionProvider initialSubstitutionProvider = null)
        {
            Substitutions initialSubstitutions = null;

            if (initialSubstitutionProvider != null)
            {
                var task = initialSubstitutionProvider.GetSubstitutionsAsync();
                task.Wait();
                initialSubstitutions = task.Result;
            }

            foreach (var provider in providers)
            {
                provider.OnSubstitutionsUpdated += async(Substitutions substitutions) =>
                {
                    await Task.WhenAll(providers
                                       .Where(p => p != provider)
                                       .Select(p => p.UpdateSubstitutionsAsync(substitutions)));
                };
                if (initialSubstitutions != null && !initialSubstitutionProvider.Equals(provider))
                {
                    provider.UpdateSubstitutionsAsync(initialSubstitutions).Wait();
                }
            }
        }
Esempio n. 2
0
        public override async Task <double> Evaluate(ISubstitutionProvider substitutionProvider)
        {
            var result = Variables.Select(x => x.Value).Sum();

            Parallel.ForEach(Children, async(x) =>
            {
                var evaluation = await x.Evaluate(substitutionProvider);
                result        += evaluation;
            });
            return(result);
        }
Esempio n. 3
0
        public override async Task <double> Evaluate(ISubstitutionProvider substitutionProvider)
        {
            var result = Variables.Aggregate((x, y) => x - y);

            Parallel.ForEach(Children, async(x) =>
            {
                var evaluation = await x.Evaluate(substitutionProvider);
                result        -= evaluation;
            });
            return(result);
        }
Esempio n. 4
0
        public App(string configFile)
        {
            var configText = File.ReadAllText(configFile);
            var config     = JsonSerializer.Deserialize <Config>(configText, new JsonSerializerOptions
            {
                PropertyNameCaseInsensitive = false,
                PropertyNamingPolicy        = JsonNamingPolicy.CamelCase
            });
            ISubstitutionProvider main = null;
            var providers = config.Providers
                            .Select((providerConfig) =>
            {
                ISubstitutionProvider provider = null;
                if (providerConfig.Type == "json")
                {
                    provider = new FileSubstitutionsProvider(providerConfig.Path, new JsonFileLoader());
                }
                if (providerConfig.Type == "mac")
                {
                    provider = new FileSubstitutionsProvider(providerConfig.Path, new MacFileLoader());
                }
                if (providerConfig.IsPrimarySource)
                {
                    main = provider;
                }
                if (provider == null)
                {
                    Console.Error.WriteLine($"Provider {providerConfig.Type} unknown, skipping");
                }
                return(provider);
            })
                            .Where(provider => provider != null)
                            .ToList();

            Console.WriteLine($"{providers.Count()} providers");
            var monitor = new SubstitutionsMonitor(providers, main);
        }
Esempio n. 5
0
 public async Task <double> Evaluate(ISubstitutionProvider substitutionProvider)
 => System.Math.Pow(await Operation.Evaluate(substitutionProvider), Power);
Esempio n. 6
0
 public abstract Task <double> Evaluate(ISubstitutionProvider substitutionProvider);