public void AlarmClock_WakeTimeSet_FiresWakeTime() { var hasSignalled = false; var waiter = new ManualResetEventSlim(); using (waiter) { using var clock = new AlarmClock(); clock.Ticked += ClockTicked; clock.Ticked += (sender, e) => // lambda { Debug.WriteLine($"LambdaTicked: sender={sender} e.value={e.Value}"); }; clock.WakeUp += (sender, e) => { Debug.WriteLine($"Time to wake up: time={DateTime.Now.TimeOfDay}"); waiter.Set(); }; clock.WakeTime = DateTime.Now.AddMinutes(2).TimeOfDay; Debug.WriteLine($"WakeTime set to {clock.WakeTime}"); clock.Start(); hasSignalled = waiter.Wait(TimeSpan.FromMinutes(5)); } Assert.IsTrue(hasSignalled); }
public static void Main() { var clock = new AlarmClock(); clock.Ticked += ClockTicked; clock.WakeUp += ClockWakeUp; clock.ClockTime = DateTime.Now; clock.AlarmTime = DateTime.Now.AddMinutes(120); Console.WriteLine($"ClockTime={clock.ClockTime:t}"); Console.WriteLine($"AlarmTime={clock.AlarmTime:t}"); clock.Start(); Console.WriteLine("Press ENTER"); Console.ReadLine();
public void AlarmClock_WakeTimeSet_FiresWakeTime() { var hasSignalled = false; var clock = new AlarmClock(); clock.Ticked += ClockTicked; clock.WakeUp += ClockOnWakeUp; clock.ClockTime = DateTime.Now; clock.AlarmTime = DateTime.Now.AddMinutes(2); Debug.WriteLine($"AlarmTime set to {clock.AlarmTime}"); clock.Start(); hasSignalled = _waiter.Wait(TimeSpan.FromMinutes(5)); Assert.IsTrue(hasSignalled); }
private static async void StartAlarmClock() { var timeSpan = new TimeSpan(4, 30, 0); Action action = () => { using (var client = new HttpClient()) { client.GetAsync($"http://127.0.0.1:{Port}/api/SmartHouse/TurnOff").Wait(); } Logger.LogInfoMessage("Smart house turn off"); var smartHouse = new SmartHouseService(); var pandoraService = new PandoraService(); pandoraService.Stop(); using (var orvibioService = new OrviboService()) { var turnOffResult = orvibioService.TurnOff(); Logger.LogInfoMessage("orvibioService.TurnOff"); Logger.LogInfoMessage(turnOffResult.Message); Thread.Sleep(TimeSpan.FromMinutes(1)); var turnOnResult = orvibioService.TurnOn(); Logger.LogInfoMessage("orvibioService.TurnOn"); Logger.LogInfoMessage(turnOnResult.Message); } Thread.Sleep(TimeSpan.FromMinutes(3)); smartHouse.RestartOpenVPNService().Wait(); }; var alarmClock = new AlarmClock(DateTime.Today.AddDays(1).Date.AddTicks(timeSpan.Ticks), action); await alarmClock.Start(); }
public void Start() { var pubsub = new TopicBasedPubsub(); var clock = new AlarmClock(pubsub); var midgetHouse = new QueuedHandler <IMessage>(new MidgetHouse(pubsub), "midgets"); midgetHouse.Start(); pubsub.Subscribe <IMessage>(midgetHouse); var cashier = new QueuedHandler <TakePayment>(new Cashier(pubsub), "cashier"); var assistant = new QueuedHandler <PriceOrder>(new Assistantmanager(pubsub), "assistant"); var spike = new Handlers.SpikeOrder(); var rnd = new Random(); cooks = new List <QueuedHandler <CookFood> >() { new QueuedHandler <CookFood>(new Cook(pubsub, rnd.Next(0, 1000)), "cook1"), new QueuedHandler <CookFood>(new Cook(pubsub, rnd.Next(0, 1000)), "cook2"), new QueuedHandler <CookFood>(new Cook(pubsub, rnd.Next(0, 1000)), "cook3"), new QueuedHandler <CookFood>(new Cook(pubsub, rnd.Next(0, 1000)), "cook4"), new QueuedHandler <CookFood>(new Cook(pubsub, rnd.Next(0, 1000)), "cook5"), }; var kitchen = new QueuedHandler <CookFood>( new RandomlyDropOrder <CookFood>(new TimeToLiveHandler <CookFood>( new MoreFairDispatcherHandler <CookFood>(cooks) ), 3), "kitchen"); var printer = new ConsolePrintingHandler(); pubsub.Subscribe(kitchen); pubsub.Subscribe(assistant); pubsub.Subscribe(cashier); pubsub.Subscribe(spike); pubsub.Subscribe(clock); kitchen.Start(); assistant.Start(); cashier.Start(); clock.Start(); monitorQueues = new List <IMonitor>(); foreach (var threadCook in cooks) { monitorQueues.Add(threadCook); threadCook.Start(); } monitorQueues.Add(kitchen); monitorQueues.Add(cashier); monitorQueues.Add(assistant); var waiter = new Waiter(pubsub); var thread = new Thread(Monitor); thread.Start(); var items = new[] { new Item { Name = "Soup", Qty = 2, Price = 3.50m }, new Item { Name = "Goulash", Qty = 2, Price = 3.50m } }; for (int i = 0; i < 10; i++) { var corr = Guid.NewGuid().ToString(); //pubsub.Subscribe<CookFood>(printer, corr); //pubsub.Subscribe<PlaceOrder>(printer, corr); //pubsub.Subscribe<TakePayment>(printer, corr); waiter.PlaceOrder(items, corr); } Console.ReadLine(); }
static void Main(string[] args) { var d = new Dispatcher(); var midgetHouse = new MidgetHouse(d); d.Subscribe<OrderPlaced>(midgetHouse); d.Subscribe<DodgyOrderPlaced>(midgetHouse); var manager = new Manager(); var cashier = new Cashier(d); var ass = new AssMan(d); var cookDispatcher = new SmartDispatcher<CookFood>(); var cookTtlGate = new TimeToLiveGate<CookFood>(cookDispatcher); var cookQueudHandler = new QueuedHandler<CookFood>(cookTtlGate, "cook ttl gate"); var cookLimiter = new Limiter<CookFood>(cookQueudHandler); //var cookScrewsUp = new ScrewsUp<CookFood>(cookLimiter); var alarmClock = new AlarmClock(d); var messageMonitor = new MessageMonitor(d); var fmm = new FilePerOrderMonitor(d); d.Subscribe(alarmClock); d.Subscribe(cookLimiter); d.Subscribe(ass); d.Subscribe(cashier); d.Subscribe(manager); d.Subscribe<OrderPlaced>(messageMonitor); d.Subscribe<DodgyOrderPlaced>(messageMonitor); d.Subscribe<OrderPlaced>(fmm); d.Subscribe<DodgyOrderPlaced>(fmm); var cookQueudHandler1 = new QueuedHandler<CookFood>(new Cook(d, 10000), "c1"); cookDispatcher.AddHandler(cookQueudHandler1); var cookQueudHandler2 = new QueuedHandler<CookFood>(new Cook(d, 5000), "c2"); cookDispatcher.AddHandler(cookQueudHandler2); var cookQueudHandler3 = new QueuedHandler<CookFood>(new Cook(d, 100), "c3"); cookDispatcher.AddHandler(cookQueudHandler3); var queueMonitor = new QueueMonitor(new IAmMonitored[] {cookQueudHandler1, cookQueudHandler2, cookQueudHandler3, cookQueudHandler,d.QueudHandler}); //Cook cook = new Cook(ass); var waiter = new Waiter(d); cookQueudHandler1.Start(); cookQueudHandler2.Start(); cookQueudHandler3.Start(); cookQueudHandler.Start(); d.Start(); alarmClock.Start(); queueMonitor.Start(); new Thread(TryPay).Start(cashier); Random r = new Random(); for (int i = 0; i < 500; i++) { Guid orderNumber; if (r.Next()%2 == 0) { orderNumber = waiter.PlaceDodgyOrder(new[] {Tuple.Create("Burger", 1)}, 15); } else { orderNumber = waiter.PlaceOrder(new[] { Tuple.Create("Burger", 1) }, 15); } if(i > 2)Thread.Sleep(2000); orders.TryAdd(orderNumber, null); } //var orderNumber = waiter.PlaceOrder(new[] {Tuple.Create("Burger", 1)}, 15); //cashier.PayForOrder(orderNumber); Console.ReadLine(); }
public void Start() { alarm = new AlarmClock(); alarm.OnAlarm += new AlarmClockEventHandler(alarm_OnAlarm); alarm.Start(1000); }