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); }
public Task <Result <Sandwich> > Sell(SandwichKind kind) { var sandwich = _lines[kind]; OnPurchase(DateTimeOffset.Now, sandwich); return(Task.Factory.StartNew <Result <Sandwich> >(() => _lines[kind])); }
private async void BuyAndEat(SandwichKind kind) { var purchase = Retailer.Instance.Sell(kind); if (purchase.Fail) { return; } var x = await Digest(); }
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) });
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())); }
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()); }
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)); }
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()); }
public LineSummary(SandwichKind kind, int added) { Kind = kind; Added = added; }
public LineSummaryViewModel(SandwichKind type) { Type = type; }
public IAdditionable Add(IKeyIngredient ingredient) { _type = ingredient.Kind; _ingredients.Add(ingredient); return(this); }
public int Count(SandwichKind kind) { return(_lines[kind].Count); }
private Sandwich ProduceSandwich(SandwichKind kind, DateTimeOffset addMinutes) { return(new Sandwich(kind, addMinutes)); }
public Result <Sandwich> this[SandwichKind kind] => Grab(kind);
public StockItem(SandwichKind type, int count) { Type = type; Count = count; }
public ProductionRequest(SandwichKind kind, int count) { Kind = kind; Count = count; }
public Sandwich(SandwichKind kind, DateTimeOffset expirationDate, params string[] ingredients) { _kind = kind; _expirationDate = expirationDate; _ingredients = ingredients; }