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