private static WireUpResult WireUp(TopicBasedPubSub topicBasedPubSub) { var horn = PrintDetails ? (IHorn) new ConsoleHorn() : new SilentHorn(); var cookNames = new[] { "Joe", "Greg", "Bro" }; var printer = new Printer(horn); var cashier = AsQueueable(nameof(Cashier), new Cashier(topicBasedPubSub, horn)); var assistantManager = AsQueueable(nameof(AssistantManager), new AssistantManager(topicBasedPubSub, horn)); var random = new Random(); var cooks = cookNames .Select( cookName => AsQueueable($"{nameof(Cook)}-{cookName}", new DroppingHandler <CookFood>(new Cook(topicBasedPubSub, horn, cookName, random.Next(0, 10000))))) .ToList(); var megaCook = AsQueueable("CookDispatcher", new MoreFairDispatcher <CookFood>(cooks)); var waiter = new Waiter(topicBasedPubSub, horn); topicBasedPubSub.SubscribeByType <PrintReceipt>(printer); topicBasedPubSub.SubscribeByType <TakePayment>(cashier); topicBasedPubSub.SubscribeByType <PriceOrder>(assistantManager); topicBasedPubSub.SubscribeByType <CookFood>(megaCook); var midgetHouse = AsQueueable(nameof(MidgetHouse), new MidgetHouse(topicBasedPubSub)); var items = cooks.Concat(new object[] { megaCook, cashier, assistantManager, midgetHouse }).ToList(); var statsProjection = new StatsProjection(); topicBasedPubSub.SubscribeByType <OrderPlaced>(statsProjection); topicBasedPubSub.SubscribeByType <OrderFinalized>(statsProjection); return(new WireUpResult { Waiter = waiter, Startables = items .Cast <IStartable>() .ToList(), Trackables = items .Cast <ITrackable>() .ToList(), MidgetHouse = midgetHouse, StatsProjection = statsProjection }); }
public static void SeedData() { restaurantsContext db = new restaurantsContext(); //************INSERT RESTAURANTS*********** var restaurant = db.Restaurant; Restaurant kaspers = new Restaurant() { AddressRes = "Lillegade", NameRes = "Kaspers Bofhus", Type = "Bofhus" }; db.Add(kaspers); Restaurant jensens = new Restaurant() { AddressRes = "Rosenkrantzgade", NameRes = "Jensens Bofhus", Type = "Bofhus" }; db.Add(jensens); Restaurant fiskens = new Restaurant() { AddressRes = "Fiskehusvej", NameRes = "Thanks For All the Fisk", Type = "Fisk" }; db.Add(fiskens); db.SaveChanges(); //************INSERT DISHES***************** var dish = db.Dish; // Lillegade ******************************* Dish bof = new Dish() { DishName = "Bof", DishDescription = "Den lækreste bof i huset", Price = 199, Category = "Bof", AddressRes = "Lillegade" }; db.Add(bof); Dish megabof = new Dish() { DishName = "MEGA Bof", DishDescription = "Den lækreste MEGA bof i huset", Price = 259, Category = "Bof", AddressRes = "Lillegade" }; db.Add(megabof); Dish minibof = new Dish() { DishName = "mini Bof", DishDescription = "Den lækreste mini bof i huset", Price = 129, Category = "Bof", AddressRes = "Lillegade" }; db.Add(minibof); // Rosenkrantzgade ************************* Dish salatbar = new Dish() { DishName = "Salatbar", DishDescription = "Tag selv salatbar - all you can eat", Price = 49, Category = "Salat", AddressRes = "Rosenkrantzgade" }; db.Add(salatbar); Dish nachos = new Dish() { DishName = "Nachos", DishDescription = "Sprode tortillachips med ched dar og jalapeños. Serveres med guacamole, salsa og creme fraiche", Price = 69, Category = "Frokost", AddressRes = "Rosenkrantzgade" }; db.Add(nachos); Dish hakkebof = new Dish() { DishName = "Herregårds-hakkebof", DishDescription = "Hakkebof serveres med lune ærter, tykke fries og Jensens Bearnaisesauce", Price = 79, Category = "Frokost", AddressRes = "Rosenkrantzgade" }; db.Add(hakkebof); // Fiskehusvej ***************************** Dish rogn = new Dish() { DishName = "Stenbiderrogn", DishDescription = "Yummmm lidt æg til vinen", Price = 110, Category = "Fisk", AddressRes = "Fiskehusvej" }; db.Add(rogn); Dish deller = new Dish() { DishName = "Fiskefrikadeller", DishDescription = "Dejlig saftige fiskefrikedeller af den bedste torsk fra Gudenåen", Price = 150, Category = "Fisk", AddressRes = "Fiskehusvej" }; db.Add(deller); //************INSERT TABLES**************** var table = db.TableRes; // Lillegade ******************************* var bord1 = new TableRes() { TableNumber = 1, Chairs = 2, AddressRes = "Lillegade" }; db.Add(bord1); var bord2 = new TableRes() { TableNumber = 2, Chairs = 4, AddressRes = "Lillegade" }; db.Add(bord2); var bord3 = new TableRes() { TableNumber = 3, Chairs = 4, AddressRes = "Lillegade" }; db.Add(bord3); // Rosenkrantzgade ************************* var bord4 = new TableRes() { TableNumber = 4, Chairs = 4, AddressRes = "Rosenkrantzgade" }; db.Add(bord4); var bord5 = new TableRes() { TableNumber = 5, Chairs = 4, AddressRes = "Rosenkrantzgade" }; db.Add(bord5); // Fiskehusvej ***************************** var bord6 = new TableRes() { TableNumber = 6, Chairs = 6, AddressRes = "Fiskehusvej" }; db.Add(bord6); var bord7 = new TableRes() { TableNumber = 7, Chairs = 2, AddressRes = "Fiskehusvej" }; db.Add(bord7); var bord8 = new TableRes() { TableNumber = 8, Chairs = 4, AddressRes = "Fiskehusvej" }; db.Add(bord8); //************INSERT WAITERS************** var waiter = db.Waiter; var tjener1 = new Waiter() { Salary = 120000, AddressRes = "Lillegade" }; db.Add(tjener1); var tjener2 = new Waiter() { Salary = 12000, AddressRes = "Rosenkrantzgade" }; db.Add(tjener2); var tjener3 = new Waiter() { Salary = 20000, AddressRes = "Fiskehusvej" }; db.Add(tjener3); //************INSERT GUESTS var guest = db.Guest; // Lillegade ******************************* var gaest1 = new Guest() { NameBooker = "Carsten", TableNumber = 1, PartySize = 2, Time = new DateTime(2019, 11, 10, 18, 00, 00), AddressRes = "Lillegade" }; db.Add(gaest1); var gaest2 = new Guest() { NameBooker = "Lillian", TableNumber = 2, PartySize = 4, Time = new DateTime(2019, 11, 10, 19, 30, 00), AddressRes = "Lillegade" }; db.Add(gaest2); // Rosenkrantzgade ************************* var gaest3 = new Guest() { NameBooker = "Suzanne", TableNumber = 4, PartySize = 3, Time = new DateTime(2019, 11, 11, 12, 30, 00), AddressRes = "Rosenkrantzgade" }; db.Add(gaest3); var gaest4 = new Guest() { NameBooker = "Allan", TableNumber = 5, PartySize = 4, Time = new DateTime(2019, 11, 14, 14, 15, 00), AddressRes = "Rosenkrantzgade" }; db.Add(gaest4); // Fiskehusvej ***************************** var gaest5 = new Guest() { NameBooker = "Niklas", TableNumber = 7, PartySize = 1, Time = new DateTime(2019, 12, 24, 12, 00, 00), AddressRes = "Fiskehusvej" }; db.Add(gaest5); //************INSERT RESTAURANT REVIEWS************** var review = db.Review; // Lillegade ******************************* var review1 = new Review() { DishId = null, ReviewerName = "Carsten", Stars = 5, ReviewText = "Fin restaurant", Time = DateTime.Now, AddressRes = "Lillegade" }; db.Add(review1); var review2 = new Review() { DishId = null, ReviewerName = "Frederik", Stars = 3, ReviewText = "Kunne vaere bedre", Time = DateTime.Now, AddressRes = "Lillegade" }; db.Add(review2); var review3 = new Review() { DishId = null, ReviewerName = "Peter", Stars = 1, ReviewText = "Daarlig service", Time = DateTime.Now, AddressRes = "Lillegade" }; db.Add(review3); var review4 = new Review() { DishId = null, ReviewerName = "Suzanne", Stars = 4, ReviewText = "God mad", Time = DateTime.Now, AddressRes = "Lillegade" }; db.Add(review4); var review5 = new Review() { DishId = null, ReviewerName = "Jens", Stars = 4, ReviewText = "Fint", Time = DateTime.Now, AddressRes = "Lillegade" }; db.Add(review5); // Rosenkrantzgade ************************* var review6 = new Review() { DishId = null, ReviewerName = "Bo", Stars = 3, ReviewText = "Fint", Time = DateTime.Now, AddressRes = "Rosenkrantzgade" }; db.Add(review6); // Fiskehusvej ***************************** var review7 = new Review() { DishId = null, ReviewerName = "Franz", Stars = 5, ReviewText = "God fisk", Time = DateTime.Now, AddressRes = "Fiskehusvej" }; db.Add(review7); //************INSERT DISH REVIEWS************** // Lillegade dish 1 *************************** var dishReview1 = new Review() { DishId = 1, ReviewerName = "Carsten", Stars = 5, ReviewText = "Super god bof!", Time = DateTime.Now, AddressRes = "Lillegade" }; db.Add(dishReview1); var dishReview2 = new Review() { DishId = 1, ReviewerName = "Lillian", Stars = 3, ReviewText = "Kunne vaere bedre", Time = DateTime.Now, AddressRes = "Lillegade" }; db.Add(dishReview2); var dishReview3 = new Review() { DishId = 1, ReviewerName = "Lars", Stars = 3, ReviewText = "OK", Time = DateTime.Now, AddressRes = "Lillegade" }; db.Add(dishReview3); // Lillegade dish 2 *************************** var dishReview4 = new Review() { DishId = 2, ReviewerName = "Mette", Stars = 5, ReviewText = "Yummy!", Time = DateTime.Now, AddressRes = "Lillegade" }; db.Add(dishReview4); var dishReview5 = new Review() { DishId = 2, ReviewerName = "Abraham", Stars = 3, ReviewText = "Fin bof", Time = DateTime.Now, AddressRes = "Lillegade" }; db.Add(dishReview5); // Lillegade dish 3 *************************** var dishReview13 = new Review() { DishId = 3, ReviewerName = "Sandra", Stars = 3, ReviewText = "Meget lille bof", Time = DateTime.Now, AddressRes = "Lillegade" }; db.Add(dishReview13); // Rosenkrantzgade dish 1 ********************* var dishReview6 = new Review() { DishId = 4, ReviewerName = "Karl", Stars = 5, ReviewText = "Altid godt", Time = DateTime.Now, AddressRes = "Rosenkrantzgade" }; db.Add(dishReview6); // Rosenkrantzgade dish 2 ********************* var dishReview7 = new Review() { DishId = 5, ReviewerName = "Karl", Stars = 5, ReviewText = "Altid godt", Time = DateTime.Now, AddressRes = "Rosenkrantzgade" }; db.Add(dishReview7); var dishReview8 = new Review() { DishId = 5, ReviewerName = "Preben", Stars = 4, ReviewText = "Godt", Time = DateTime.Now, AddressRes = "Rosenkrantzgade" }; db.Add(dishReview8); // Rosenkrantzgade dish 3 ********************* var dishReview9 = new Review() { DishId = 6, ReviewerName = "Tuomas", Stars = 5, ReviewText = "Yas", Time = DateTime.Now, AddressRes = "Rosenkrantzgade" }; db.Add(dishReview9); // Fiskehusvej dish 1 ************************* var dishReview10 = new Review() { DishId = 7, ReviewerName = "Brendan", Stars = 5, ReviewText = "Altid godt", Time = DateTime.Now, AddressRes = "Fiskehusvej" }; db.Add(dishReview10); var dishReview11 = new Review() { DishId = 7, ReviewerName = "Sara", Stars = 3, ReviewText = "OK fisk", Time = DateTime.Now, AddressRes = "Fiskehusvej" }; db.Add(dishReview11); // Fiskehusvej dish 2 ************************* var dishReview12 = new Review() { DishId = 8, ReviewerName = "Finn", Stars = 4, ReviewText = "Mhmm", Time = DateTime.Now, AddressRes = "Fiskehusvej" }; db.Add(dishReview12); db.SaveChanges(); }
public Client(string n, Waiter unServeur) : base(n) { this.leServeur = unServeur; }
private static void Main(string[] args) { IList <IStartable> startables = new List <IStartable>(); var bus = new Bus(); var cashier = new ThreadedHandler <TakePayment>("Cashier", new Cashier(bus)); var assistantManager = new ThreadedHandler <PriceOrder>("Assistant Manager", new AssistantManager(new MenuService(), bus)); var cook1 = new ThreadedHandler <CookFood>("Cook (Chewie)", new TtlHandler <CookFood>(new Cook("Chewie", 123, bus))); var cook2 = new ThreadedHandler <CookFood>("Cook (Luke)", new TtlHandler <CookFood>(new Cook("Luke", 456, bus))); var cook3 = new ThreadedHandler <CookFood>("Cook (Darth)", new TtlHandler <CookFood>(new Cook("Darth", 217, bus))); var mfdDispatcher = new MfdDispatcher <CookFood>(new[] { cook1, cook2, cook3 }); var kitchen = new ThreadedHandler <CookFood>("Kitchen", mfdDispatcher); var waiter = new Waiter(new MenuService(), bus); bus.Subscribe(cashier); bus.Subscribe(assistantManager); bus.Subscribe(kitchen); var house = new ProcessManagerHouse(bus); bus.Subscribe <OrderPlaced>(house); bus.Subscribe <OrderPaid>(house); var alarmClock = new AlarmClock(bus); bus.Subscribe(alarmClock); startables.Add(cashier); startables.Add(assistantManager); startables.Add(cook1); startables.Add(cook2); startables.Add(cook3); startables.Add(kitchen); startables.Add(alarmClock); foreach (var startable in startables) { startable.StartListening(); } Task.Factory.StartNew(() => { while (!_stop) { foreach (var startable in startables) { Console.WriteLine($"Queue: {startable.Name} Count: {startable.Count}"); } Thread.Sleep(1000); } }, TaskCreationOptions.LongRunning); for (var i = 0; i < 100; i++) { var isDodgy = false; //i%2 == 0; waiter.PlaceOrder(i, isDodgy, "Sausages", "Beans"); } Console.ReadKey(); }
public void OrderFood(Waiter unServeur) { Console.WriteLine("Grec complet salade tomates oignons, sans pain, sans salade, sans tomates, sans sauce et sans oignons, OK ça marche"); unServeur.PickUp(); }
private static void Main() { var publisher = new TopicBasedPubSub(); var alarmClock = new AlarmClock(publisher); var midgetHouse = new MidgetHouse(publisher); var midgetHouseHandler = new QueuedHandler <Message>("MidgetHouse", midgetHouse); midgetHouse.QueuedHandler = midgetHouseHandler; var cashier = new Cashier(publisher); var cashierQueue = new QueuedHandler <TakePayment>("Cashier", cashier); var assistantManager = new QueuedHandler <PriceOrdered>("AssistantManager", new FuzzyHandler <PriceOrdered>(new AssistantManager(publisher), 0, 20)); var seed = new Random(DateTime.Now.Millisecond); var cook1 = new QueuedHandler <CookFood>( "BogdanQueue", new TTLHandler <CookFood>(new FuzzyHandler <CookFood>(new Cook(seed.Next(1000), publisher), 10, 10))); var cook2 = new QueuedHandler <CookFood>( "RomanQueue", new TTLHandler <CookFood>(new FuzzyHandler <CookFood>(new Cook(seed.Next(1000), publisher), 95, 50))); var cook3 = new QueuedHandler <CookFood>( "WaclawQueue", new TTLHandler <CookFood>(new FuzzyHandler <CookFood>(new Cook(seed.Next(1000), publisher), 10, 20))); var dispatcher = new QueuedHandler <CookFood>( "MFDispatcher", new TTLHandler <CookFood>( new MFDispatcher <CookFood>( new List <QueuedHandler <CookFood> > { cook1, cook2, cook3 }))); StartQueues( new List <IStartable> { assistantManager, cashierQueue, dispatcher, cook1, cook2, cook3, midgetHouseHandler, alarmClock }); StartQueuePrinter( new List <IPrintable> { assistantManager, cashierQueue, dispatcher, cook1, cook2, cook3, midgetHouseHandler }); var waiter = new Waiter(publisher); publisher.Subscribe(dispatcher); publisher.Subscribe(assistantManager); publisher.Subscribe(cashier); publisher.Subscribe(alarmClock); publisher.Subscribe <OrderPlaced>(midgetHouse); PlaceOrders(waiter); HandlePays(cashier); Console.ReadKey(); }
public void CookOrder(Waiter waiter) { //waiter. }
static void Main(string[] args) { var es = new AtomDispatcher(); es.Start("az"); // es.PostMessage(new OrderPlaced(order), "az"); QueuedHandler printOrderHandler = new QueuedHandler(new PrintOrderHandler()); IEventHandler <IEvent> cashier = new Cashier(); QueuedHandler cashierProxy = new QueuedHandler(cashier); var assistingManager = new QueuedHandler(new AssistingManager("Diana")); var cook1 = new QueuedHandler(new TimeToLiveHandler(new Cook("John"))); var cook2 = new QueuedHandler(new TimeToLiveHandler(new Cook("Peter"))); var cook3 = new QueuedHandler(new TimeToLiveHandler(new Cook("Gregory"))); var betterHandler = new QueuedHandler(new Dropper(new TimeToLiveHandler(new BetterDispatcher(new[] { cook1, cook2, cook3 })))); TelephoneOperator telephoneOperator = new TelephoneOperator("PhoneMan"); Waiter waiter = new Waiter("Georgie"); var house = new MidgetHouse(Dispatcher.Instance); var houseQueue = new QueuedHandler(house); var clock = new AlarmClock(); Dispatcher.Instance.Subscribe(typeof(OrderPlaced), houseQueue); Dispatcher.Instance.Subscribe(typeof(FoodCooked), houseQueue); Dispatcher.Instance.Subscribe(typeof(OrderPriced), houseQueue); Dispatcher.Instance.Subscribe(typeof(PaymentTaken), houseQueue); Dispatcher.Instance.Subscribe(typeof(FirstCookRetry), houseQueue); Dispatcher.Instance.Subscribe(typeof(SecondCookRetry), houseQueue); Dispatcher.Instance.Subscribe(typeof(CookFood), betterHandler); Dispatcher.Instance.Subscribe(typeof(PriceOrder), assistingManager); Dispatcher.Instance.Subscribe(typeof(TakePayment), cashierProxy); Dispatcher.Instance.Subscribe(typeof(PrintOrder), printOrderHandler); Dispatcher.Instance.Subscribe(typeof(SendToMeIn), clock); IEnumerable <QueuedHandler> allHandlers = new List <QueuedHandler> { houseQueue, betterHandler, cashierProxy, assistingManager, cook1, cook2, cook3, printOrderHandler }; Monitor monitor = new Monitor(allHandlers, new [] { house }); monitor.Start(); foreach (IStartable handler in allHandlers) { handler.Start(); } clock.Start(); //waiter.PlaceOrder(new List<int> { 1, 2 }); //telephoneOperator.PlaceOrder(new List<int> { 1, 2 }); return; for (int i = 0; i < 1000; i++) { waiter.PlaceOrder(new List <int> { 1, 2 }); if (i % 3 == 0) { Thread.Sleep(50); telephoneOperator.PlaceOrder(new List <int> { 1, 2 }); } Thread.Sleep(50); } while (true) { foreach (string orderId in ((Cashier)cashier).GetOutstandingOrders()) { Console.WriteLine("Got outstanding order to pay, id " + orderId); ((Cashier)cashier).Pay(orderId, "123456"); } Thread.Sleep(1); } //Console.ReadLine(); }
private static void Main(string[] args) { var dispatcher = new Dispatcher(); var waiter = new Waiter(dispatcher); var assistant = new AssistantManager(dispatcher); var cashier = new Cashier(dispatcher); var timer = new TimerHandler(dispatcher); var house = new RunnerHouse(dispatcher); var serialHouse = new ThreadedHandler <Event>( "House", house); // set up the kitchen var cookedOrders = new ConcurrentDictionary <Guid, bool>(); var cooks = new List <Cook> { new Cook("James", 100, cookedOrders, dispatcher), new Cook("Emily", 50, cookedOrders, dispatcher), new Cook("Sarah", 500, cookedOrders, dispatcher) }; var threadedCooks = cooks.Select(c => new ThreadedHandler <CookFood>(c.Name, c)).ToList(); var kitchen = new ThreadedHandler <CookFood>( "Kitchen", new ScrewUp <CookFood>( new MorefairDispatcher <CookFood>( threadedCooks))); var numCompleted = 0; var numFailedImmediately = 0; var numFailedAfterRetry = 0; var numSucceededImmediately = 0; var numSucceededAfterRetry = 0; var onCompleted = new ThreadedHandler <OrderCompleted>( "OnCompleted", new Handler <OrderCompleted>(e => { numCompleted++; if (e.Success && e.Retried) { numSucceededAfterRetry++; } if (e.Success && !e.Retried) { numSucceededImmediately++; } if (!e.Success && e.Retried) { numFailedAfterRetry++; } if (!e.Success && !e.Retried) { numFailedImmediately++; } })); // subscribe everything dispatcher.Subscribe(kitchen); dispatcher.Subscribe(assistant); dispatcher.Subscribe(cashier); dispatcher.Subscribe(serialHouse); dispatcher.Subscribe(timer); dispatcher.Subscribe(onCompleted); // subscribe various printers //dispatcher.Subscribe(new Handler<CookFood>(e => Console.WriteLine($"{e.CorrelationId} Command: CookFood"))); //dispatcher.Subscribe(new Handler<PriceOrder>(e => Console.WriteLine($"{e.CorrelationId} Command: PriceOrder"))); //dispatcher.Subscribe(new Handler<TakePayment>(e => Console.WriteLine($"{e.CorrelationId} Command: TakePayment"))); //dispatcher.Subscribe(new Handler<PrintOrder>(e => Console.WriteLine($"{e.CorrelationId} Command: PrintOrder"))); //dispatcher.Subscribe(new Handler<Callback>(e => Console.WriteLine($"{e.CorrelationId} Command: Callback"))); //dispatcher.Subscribe(new Handler<OrderPlaced>(e => Console.WriteLine($"{e.CorrelationId} Ordered"))); //dispatcher.Subscribe(new Handler<FoodCooked>(e => Console.WriteLine($"{e.CorrelationId} Cooked"))); //dispatcher.Subscribe(new Handler<OrderPriced>(e => Console.WriteLine($"{e.CorrelationId} Priced"))); //dispatcher.Subscribe(new Handler<OrderPaid>(e => Console.WriteLine($"{e.CorrelationId} Paid"))); //dispatcher.Subscribe(new Handler<OrderCompleted>(e => Console.WriteLine($"{e.CorrelationId} OrderCompleted"))); //dispatcher.Subscribe(new Handler<CookFoodCalledBack>(e => Console.WriteLine($"{e.CorrelationId} CookFoodCalledBack"))); //dispatcher.Subscribe(new Handler<FailedToContactTheKitchen>(e => Console.WriteLine($"{e.CorrelationId} Failed"))); // start everything serialHouse.Start(); kitchen.Start(); foreach (var cook in threadedCooks) { cook.Start(); } onCompleted.Start(); var numOrders = 300; for (var i = 0; i < numOrders; i++) { waiter.PlaceOrder("Toby", 1, new List <Tuple <string, int> > { Tuple.Create("Meat", 2), Tuple.Create("Veg", 1) }); } Action print = () => { Console.WriteLine($"-----------------------------------------"); Console.WriteLine($"{kitchen.Name}: {kitchen.Count}"); foreach (var cook in threadedCooks) { Console.WriteLine($"{cook.Name}: {cook.Count}"); } Console.WriteLine($"{onCompleted.Name}: {onCompleted.Count}"); Console.WriteLine($"Timer {timer.Count}"); Console.WriteLine($"Runners {house.CountRunners}"); Console.WriteLine($"num Failed Immediately {numFailedImmediately}"); Console.WriteLine($"num Failed AfterRetry {numFailedAfterRetry}"); Console.WriteLine($"num Succeeded Immediately {numSucceededImmediately}"); Console.WriteLine($"num Succeeded AfterRetry {numSucceededAfterRetry}"); Console.WriteLine($"Complete {numCompleted}/{numOrders}"); Thread.Sleep(1000); }; while (numCompleted < numOrders) { print(); } print(); Console.WriteLine("All done"); }