コード例 #1
0
        private Sandwich Produce(SandwichKind kind)
        {
            var result = kind switch
            {
                SandwichKind.Beef => new SandwichBuilder()
                .Add(new PulledBeef())
                .AddAddition(new Lettuce())
                .AddAddition(new Onion())
                .AddAddition(new Vegetable("carrot"))
                .AddAddition(new Vegetable("perslay"))
                .AddAddition(new Cheese())
                .AddTopping(new Mustard())
                .AddTopping(new Ketchup())
                .Wrap(),

                SandwichKind.Cheese => new SandwichBuilder()
                .Add(new Cheese())
                .AddAddition(new Cheese())
                .AddTopping(new Mustard())
                .Wrap(),    //ProduceSandwich(kind, DateTimeOffset.Now.AddSeconds(90)),
                SandwichKind.Chicken => ProduceSandwich(kind, DateTimeOffset.Now.AddMinutes(4)),
                SandwichKind.Pork => ProduceSandwich(kind, DateTimeOffset.Now.AddSeconds(150)),
                _ => throw new ArgumentOutOfRangeException(nameof(kind), kind, null)
            };

            // Console.WriteLine("[V: {0}] sandwich {1} made ", Name, result.Kind);

            return(result);
        }
コード例 #2
0
        public Task <Result <Sandwich> > Sell(SandwichKind kind)
        {
            var sandwich = _lines[kind];

            OnPurchase(DateTimeOffset.Now, sandwich);
            return(Task.Factory.StartNew <Result <Sandwich> >(() => _lines[kind]));
        }
コード例 #3
0
        private async void BuyAndEat(SandwichKind kind)
        {
            var purchase = Retailer.Instance.Sell(kind);
            if (purchase.Fail)
            {
                return;
            }

            var x = await Digest();
        }
コード例 #4
0
 private Sandwich Produce(SandwichKind kind)
 {
     return(kind switch
     {
         SandwichKind.Beef => ProduceSandwich(kind, DateTimeOffset.Now.AddMinutes(3)),
         SandwichKind.Cheese => ProduceSandwich(kind, DateTimeOffset.Now.AddSeconds(90)),
         SandwichKind.Chicken => ProduceSandwich(kind, DateTimeOffset.Now.AddMinutes(4)),
         SandwichKind.Pork => ProduceSandwich(kind, DateTimeOffset.Now.AddSeconds(150)),
         _ => throw new ArgumentOutOfRangeException(nameof(kind), kind, null)
     });
コード例 #5
0
        public Result <Sandwich> Grab(SandwichKind kind)
        {
            if (_lines.ContainsKey(kind) || _lines[kind].Count == 0)
            {
                return(Result <Sandwich> .Failed());
            }

            _totalCount--;
            return(Result <Sandwich> .Success(_lines[kind].Dequeue()));
        }
コード例 #6
0
        public void Order(SandwichKind kind, int count)
        {
            var sandwiches = new List <Sandwich>();

            for (int i = 0; i < count; i++)
            {
                sandwiches.Add(Produce(kind));
            }
            _warehouse.AddRange(sandwiches);
            Produced?.Invoke(sandwiches.ToArray());
        }
コード例 #7
0
ファイル: Retailer.cs プロジェクト: janek9971/DotNetAdv
        public Result <Sandwich> Sell(SandwichKind kind)
        {
            if (_lines.ContainsKey(kind) == false || _lines[kind].Count == 0)
            {
                return(Result <Sandwich> .Failed());
            }

            var sandwich = _lines[kind][0];

            _lines[kind].RemoveAt(0);
            OnPurchase(DateTimeOffset.Now, sandwich);
            return(Result <Sandwich> .Success(sandwich));
        }
コード例 #8
0
        public void Order(SandwichKind kind, int count)
        {
            _requests.Enqueue(new ProductionRequest(kind, count));

            Console.WriteLine("[V: {0}] new order waits in queue  {1} - {2}", Name, kind, count);


            //var sandwiches = new List<Sandwich>();
            //for (int i = 0; i < count; i++)
            //{
            //    sandwiches.Add(Produce(kind));
            //}
            //_warehouse.AddRange(sandwiches);
            //Produced?.Invoke(sandwiches.ToArray());
        }
コード例 #9
0
ファイル: LineSummary.cs プロジェクト: janek9971/DotNetAdv
 public LineSummary(SandwichKind kind, int added)
 {
     Kind  = kind;
     Added = added;
 }
コード例 #10
0
 public LineSummaryViewModel(SandwichKind type)
 {
     Type = type;
 }
コード例 #11
0
 public IAdditionable Add(IKeyIngredient ingredient)
 {
     _type = ingredient.Kind;
     _ingredients.Add(ingredient);
     return(this);
 }
コード例 #12
0
 public int Count(SandwichKind kind)
 {
     return(_lines[kind].Count);
 }
コード例 #13
0
 private Sandwich ProduceSandwich(SandwichKind kind, DateTimeOffset addMinutes)
 {
     return(new Sandwich(kind, addMinutes));
 }
コード例 #14
0
 public Result <Sandwich> this[SandwichKind kind] => Grab(kind);
コード例 #15
0
 public StockItem(SandwichKind type, int count)
 {
     Type  = type;
     Count = count;
 }
コード例 #16
0
 public ProductionRequest(SandwichKind kind, int count)
 {
     Kind  = kind;
     Count = count;
 }
コード例 #17
0
 public Sandwich(SandwichKind kind, DateTimeOffset expirationDate, params string[] ingredients)
 {
     _kind           = kind;
     _expirationDate = expirationDate;
     _ingredients    = ingredients;
 }