Example #1
0
        static int Run(RunOptions opts)
        {
            var configs = LoadConfiguration(opts.ConfigFile);

            if (!ValidateConfiguration(configs))
            {
                return(2);
            }
            var nodes = new List <Plugin>();

            foreach (var config in configs)
            {
                var node = PluginFactory.FromConfiguration(config);
                nodes.Add(node);
            }

            foreach (var node in nodes)
            {
                var upstreams = node.Configuration.Upstreams;
                if (upstreams != null)
                {
                    foreach (var target in upstreams)
                    {
                        if (target == null)
                        {
                            continue;
                        }

                        var pattern = $"^{target.Replace(@"\.", @"\.").Replace(@"\*", @".*").Replace(@"\?", ".") }$";
                        var expr    = new Regex(pattern);
                        foreach (var upstream in nodes.FindAll(n => expr.IsMatch(n.Name)))
                        {
                            if (node == upstream)
                            {
                                continue;
                            }
                            upstream.Subscribe(node);
                        }
                    }
                }
            }

            foreach (var node in nodes)
            {
                System.Console.WriteLine($"Starting {node.Name}");
                node.Run();
            }
            System.Console.WriteLine("Running!");
            System.Console.ReadLine();

            return(0);
        }