コード例 #1
0
        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);
        }
コード例 #2
0
        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();
コード例 #3
0
        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);
        }
コード例 #4
0
        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();
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: vojtiik/CQRS_restaurant
        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();
        }
コード例 #6
0
        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();
        }
コード例 #7
0
 public void Start()
 {
     alarm          = new AlarmClock();
     alarm.OnAlarm += new AlarmClockEventHandler(alarm_OnAlarm);
     alarm.Start(1000);
 }