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