Exemple #1
0
        static void Main(string[] args)
        {
            Console.CursorVisible   = false;
            Console.ForegroundColor = ConsoleColor.White;

            using (var terminationQueueConsumer = new QueueConsumer(AppSettings.Instance.AppConfig.RabbitMQ.KitchenTerminationQueueName))
                using (var eventPublisher = new QueuePublisher(AppSettings.Instance.AppConfig.RabbitMQ.EventQueueName))
                {
                    var kitchenShelvesManager = new KitchenShelvesManager(
                        new CourierTimerFactory(),
                        new OrderDeterriorationTimerFactory(),
                        new QueueNotificationService(eventPublisher),
                        new ShelvesInitializationFromConfigFile());

                    terminationQueueConsumer.Received += (sender, ea) =>
                    {
                        var terminationProcess = new KitchenTerminationProcess(kitchenShelvesManager);
                    };

                    IRenderer renderer = new KitchenConsoleRenderer(kitchenShelvesManager);

                    using (var renderEngine = new SimpleTimerRenderEngine(renderer, fps: 1))
                    {
                        renderEngine.Start();

                        using (var kitchenOrdersConsumer = new KitchenQueueConsumer(
                                   new QueueConsumer(AppSettings.Instance.AppConfig.RabbitMQ.KitchenQueueName),
                                   kitchenShelvesManager))
                        {
                            Console.ReadKey();
                        }
                    }
                }
        }
Exemple #2
0
        public KitchenQueueConsumer(QueueConsumer queueConsumer, KitchenShelvesManager shelvesManager)
        {
            this.queueConsumer  = queueConsumer ?? throw new ArgumentNullException(nameof(queueConsumer));
            this.shelvesManager = shelvesManager ?? throw new ArgumentNullException(nameof(shelvesManager));

            queueConsumer.Received += (sender, ea) =>
            {
                var body    = ea.Body;
                var message = Encoding.UTF8.GetString(body.ToArray());
                var order   = JsonConvert.DeserializeObject <Order>(message);

                shelvesManager.AddOrder(order);
            };
        }
        public KitchenTerminationProcess(KitchenShelvesManager kitchenShelves)
        {
            var timer = new Timer();

            timer.Interval  = TimeSpan.FromSeconds(1).TotalMilliseconds;
            timer.AutoReset = true;

            timer.Elapsed += (sender, args) =>
            {
                // wait for kitchen to stop working
                if (kitchenShelves.All(x => x.Orders.Count == 0))
                {
                    using (var eventTerminationQueuePublisher = new QueuePublisher(AppSettings.Instance.AppConfig.RabbitMQ.EventLogDisplayTerminationQeueueName))
                    {
                        eventTerminationQueuePublisher.Publish(new object());
                    }

                    Environment.Exit(0);
                }
            };

            timer.Start();
        }