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