Ejemplo n.º 1
0
        void StartWashing(CarBay bay)
        {
            if (Bays.TryGetValue(bay.Id, out CarBay cb))
            {
                if (cb.IsBusy)
                {
                    return;
                }
                else
                {
                    cb.IsBusy = true;
                }
            }
            else
            {
                return;
            }

            Console.WriteLine($"Washing bay {bay.Id} has started washing cars from queue {bay.QueueId} at {DateTimeOffset.Now.TimeOfDay}");
            while (queueManager.TryDequeue(bay.QueueId, out Visitor visitor))
            {
                Console.WriteLine($"Visitor {visitor.Id} dequeued from washing queue {bay.QueueId} at {DateTimeOffset.Now.TimeOfDay}");
                Console.WriteLine($"Washing started for visitor {visitor.Id} at {DateTimeOffset.Now.TimeOfDay}");

                Thread.Sleep(new TimeSpan(0, 0, bay.ProcessingSeconds));
                NotifyAddProcessingTime(visitor.Id, TimeSpan.FromSeconds(bay.ProcessingSeconds));
                Console.WriteLine($"Washing finished for visitor {visitor.Id} at {DateTimeOffset.Now.TimeOfDay}");

                EnqueueForDrying(visitor);
            }
            Bays.Values.SingleOrDefault(b => b.Id == bay.Id).IsBusy = false;
            Console.WriteLine($"Washing bay {bay.Id} has finished washing cars from queue {bay.QueueId} at {DateTimeOffset.Now.TimeOfDay}");
        }
Ejemplo n.º 2
0
        public void CreateBay(ICarQueue queue, Enums.Enum.BayType type, int processingTime)
        {
            var bay = new CarBay
            {
                Id                = Guid.NewGuid().ToString().Substring(0, 3).ToUpper(),
                QueueId           = queue.Id,
                Type              = type,
                ProcessingSeconds = processingTime,
            };

            Bays.TryAdd(bay.Id, bay);
        }
Ejemplo n.º 3
0
        void StartDrying(CarBay bay)
        {
            if (Bays.TryGetValue(bay.Id, out CarBay cb))
            {
                if (cb.IsBusy)
                {
                    return;
                }
                else
                {
                    cb.IsBusy = true;
                }
            }
            else
            {
                return;
            }


            Console.WriteLine($"Drying bay {bay.Id} has started drying cars from queue {bay.QueueId} at {DateTimeOffset.Now.TimeOfDay}");
            var dryingQueue = queueManager.GetCarQueues(Enums.Enum.QueueType.Drying).FirstOrDefault();

            while (queueManager.TryDequeue(dryingQueue.Id, out Visitor visitor))
            {
                Console.WriteLine($"Visitor {visitor.Id} dequeued from drying queue {bay.QueueId}");
                Console.WriteLine($"Drying started for visitor {visitor.Id}");

                Thread.Sleep(new TimeSpan(0, 0, bay.ProcessingSeconds));
                NotifyAddProcessingTime(visitor.Id, TimeSpan.FromSeconds(bay.ProcessingSeconds));

                Console.WriteLine($"Drying finished for visitor {visitor.Id} at {DateTimeOffset.Now.TimeOfDay}");
                Console.WriteLine($"Visitor {visitor.Id} has been processed successfuly at {DateTimeOffset.Now.TimeOfDay}");

                Processed(this, visitor.Id);
            }

            Bays.Values.SingleOrDefault(b => b.Id == bay.Id).IsBusy = false;

            Console.WriteLine($"Drying bay {bay.Id} has finished drying cars from queue {bay.QueueId} at {DateTimeOffset.Now.TimeOfDay}");
        }