private Timer GetCustomerEnqueueTimer(CustomersQueue customersQueue, int customerEnqueueRateInSeconds) { return(new Timer(state => customersQueue.EnqueueCustomer(), null, 0, customerEnqueueRateInSeconds * 1000)); }
public StoreManager GetStoreManager(int customerEnqueueRateInSeconds, int minCashierProcessingTime, int maxCashierProcessingTime) { var customersQueue = new CustomersQueue(); Func <Timer> enqueueTimerFactory = () => GetCustomerEnqueueTimer(customersQueue, customerEnqueueRateInSeconds); var dequeueTaskScheduler = GetCustomerDequeueTaskScheduler(); // Spec was 5 cashiers. These is an optimazation to set the cashiers count by calculation. var cashiersCount = GetCashiersCount(customerEnqueueRateInSeconds, minCashierProcessingTime, maxCashierProcessingTime); return(new StoreManager(customersQueue, enqueueTimerFactory, dequeueTaskScheduler, new SleepService(), cashiersCount, minCashierProcessingTime, maxCashierProcessingTime, new Logger())); }
static void Main(string[] args) { bool exitRequested = false; _queue = new CustomersQueue <Customer>(); _server = new CustomerServer(); _sleepingBarber = new SleepingBarber <Customer>(_queue, _server); _sleepingBarber.GoingToSleep += BarberWentToSleep; WriteLine("Enter customers range to add then press ENTER"); WriteLine("Enter Q to Exit"); while (!exitRequested) { var input = ReadLine(); exitRequested = input.ToUpper() == "Q"; AddCustomers(input); } }
public void Setup() { _customersQueue = new CustomersQueue <CustomerForTest>(); }