예제 #1
0
        public virtual void AddCompletedOrder(AbstractCompletedOrder completedOrder)
        {
            if (completedOrder == null)
            {
                throw new ArgumentNullException(nameof(completedOrder), "Parameter is null.");
            }

            lock (_locker)
            {
                _completedOrders.Add(completedOrder.Number, completedOrder);
            }
        }
예제 #2
0
        private async Task CompleteOrder(AbstractOrder order)
        {
            AbstractCompletedOrder completedOrder = await PreparedOrder(order);

            // Будем считать, что выбирает ближайшее окно.. или наименее загруженное
            var productDeliveryWindow = Restaurant.ProductDeliveryWindowsByNumber.ElementAt(
                _random.Next(Restaurant.ProductDeliveryWindowsByNumber.Count())).Value;

            productDeliveryWindow.AddCompletedOrder(completedOrder);

            OrderCompleted(this, new OrderCompletedEventArgs(new CompletdOrderInfo(order.Number, productDeliveryWindow.WindowNumber)));

            _isFree = true;
        }
예제 #3
0
        public virtual AbstractCompletedOrder ExtractCompletedOrderByNumber(int orderNumber)
        {
            AbstractCompletedOrder completedOrder = null;

            lock (_locker)
            {
                if (!_completedOrders.TryGetValue(orderNumber, out completedOrder))
                {
                    return(null); // Стоит ли тут бросать экзепшн, если такого заказа нет?
                }
            }

            CompletedOrderTaken(this, new CompletedOrderTakenEventArgs(completedOrder));

            return(completedOrder);
        }
예제 #4
0
 public CompletedOrderTakenEventArgs(AbstractCompletedOrder completedOrder)
 {
     CompletedOrder = completedOrder ?? throw new ArgumentNullException(nameof(completedOrder), "Argument is null.");
 }