Example #1
0
        public async Task <Order> AddOrderAsync(Order order, string dishname, CancellationToken cancellationToken)
        {
            if (order == null)
            {
                return(null);
            }
            var contract = new OrderContract(order.RestaurantId, order.TableId, order.DishId, dishname,
                                             order.Price,
                                             DateTime.Now);
            await StateManager.SetStateAsync(OrderDataKey, contract, cancellationToken);

            await this.SetOrderStateAsync(OrderState.Ordered);

            order.OrderId = Id.GetGuidId();

            var tableActor = new TableActorProxy().CreateActor(order.TableId);
            await tableActor.AddOrder(new TableOrder()
            {
                Dish = dishname, OrderId = order.OrderId, Price = order.Price
            }, CancellationToken.None);

            //Register reminder
            await RegisterReminderAsync(
                OrderStateReminder,
                null,
                TimeSpan.FromSeconds(1),
                TimeSpan.FromSeconds(30));

            ActorEventSource.Current.ActorMessage(this, "New Order ID: {0}. Dish: {1}", Id.GetGuidId(),
                                                  order.DishId);
            return(order);
        }
Example #2
0
        public async Task <Order> Create([FromBody] Order order)
        {
            if (order == null)
            {
                return(null);
            }
            try
            {
                var tableActor = new TableActorProxy().CreateActor(order.TableId);
                order.OrderId = Guid.NewGuid();
                var dish = await new MenuServiceProxyFactory().CreateServiceProxy(order.RestaurantId).GetDishAsync(order.RestaurantId, order.DishId);
                order.Price = dish.Price;
                var orderActor = new OrderActorProxy().CreateActor(order.OrderId);
                await orderActor.AddOrderAsync(order, CancellationToken.None);

                await tableActor.AddOrder(new TableOrder()
                {
                    Dish = dish.Name, OrderId = order.OrderId, Price = dish.Price
                }, CancellationToken.None);

                return(await orderActor.GetOrderAsync(CancellationToken.None));
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                throw;
            }
        }