Пример #1
0
 private Timer GetCustomerEnqueueTimer(CustomersQueue customersQueue, int customerEnqueueRateInSeconds)
 {
     return(new Timer(state => customersQueue.EnqueueCustomer(),
                      null,
                      0,
                      customerEnqueueRateInSeconds * 1000));
 }
Пример #2
0
        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()));
        }
Пример #3
0
        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>();
 }