public static void Main(string[] args) { var bus = new AppBus(); var alarmClock = new AlarmClock(bus); var startables = new List <IStartable> (); var importantManQueue = new QueuedHandler(new NarrowingHandler <Message, NeedToTakeAction>(new ImportantMan(bus)), "Important man"); var monitorQueue = new QueuedHandler( new RoundRobinWithLoadBalancing( new[] { CreateMonitor(bus, startables, "Monitor q #01"), CreateMonitor(bus, startables, "Monitor q #02"), CreateMonitor(bus, startables, "Monitor q #03") } ), "Monitor queues" ); bus.Subscribe(alarmClock); bus.Subscribe(new WideningHandler <Message, NeedToTakeAction>(importantManQueue)); bus.Subscribe(monitorQueue); startables.Add(alarmClock); startables.Add(monitorQueue); startables.Add(importantManQueue); startables.ForEach(s => s.Start()); RunStatistics(startables); RunFakeSensors(bus); Console.ReadKey(); }
private static QueuedHandler CreateMonitor(IAppBus bus, List <IStartable> startables, string monitorName) { var queueHandler = new QueuedHandler( new TimeToLiveHandler( new AlertMonitor( new NarrowingHandler <Message, TemperatureChanged> (new Monitor()), new HighTemperatureThreshold(120), bus) ), monitorName); startables.Add(queueHandler); return(queueHandler); }