Ejemplo n.º 1
0
        public Manager(AutomataConfiguration configuration)
        {
            Dictionary <Type, ILogSink> logSinks = new Dictionary <Type, ILogSink>();

            this.configuration = configuration;
            if (this.configuration == null)
            {
                throw new ArgumentNullException("Configuration is null");
            }

            if (!this.configuration.HasConfiguration)
            {
                throw new Exception("Automata configuration is incomplete.");
            }

            foreach (var group in this.configuration.TaskGroups)
            {
                var taskGroup = new TaskGroup();
                taskGroup.Name = group.Name;

                var tasks = new List <ITask>();

                if (!logSinks.ContainsKey(group.LogSink))
                {
                    var logSink = (ILogSink)Activator.CreateInstance(group.LogSink);
                    Dictionary <string, string> logParameters = this.configuration.LogSinks.Where(s => s.LogSink == group.LogSink).FirstOrDefault()?.Parameters;

                    if (logParameters != null)
                    {
                        logSink.Configure(logParameters);
                    }

                    logSinks.Add(group.LogSink, logSink);
                }

                taskGroup.LogSink = logSinks[group.LogSink];

                // create task here, and assign it the logsink from the dictionary
                foreach (var task in group.Tasks)
                {
                    var automationTask = (ITask)Activator.CreateInstance(task.Item2);
                    automationTask.LogSink = taskGroup.LogSink;

                    Dictionary <string, string> taskParameters = task.Item3;

                    if (taskParameters != null)
                    {
                        automationTask.Configure(taskParameters);
                    }

                    automationTask.Name      = task.Item1;
                    automationTask.GroupName = taskGroup.Name;

                    tasks.Add(automationTask);
                }

                taskGroup.AutomationTasks = tasks.ToArray();
                taskGroups.Add(taskGroup);
            }
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            Console.Write($"HOST: Starting Threads({Process.GetCurrentProcess().Threads.Count})\r\n");

            AutomataConfiguration configuration = (AutomataConfiguration)System.Configuration.ConfigurationManager.GetSection("automata");

            Manager manager = new Manager(configuration);

            manager.Governer();



            int i = 0;

            while (manager.IsActive)
            {
                i++;
                if (i == 30)
                {
                    manager.RequestPause();
                    Console.Write("HOST: Sent a request to pause...\r\n");
                }
                if (i == 60)
                {
                    manager.UnPause();
                    Console.Write("HOST: Sent a request to unpause...\r\n");
                }
                if (i == 90)
                {
                    manager.RequestStop();
                    Console.Write("HOST: Sent a request to stop...\r\n");
                }

                Console.Write($"HOST: {i}\t{manager.Status}\tThreads({Process.GetCurrentProcess().Threads.Count})\r\n");

                Thread.Sleep((int)configuration.PollingInSeconds * 1000);
            }

            Console.Write("done.");


            Console.Read();
        }