Example #1
0
        private static Waiter SetUp(List <IStartable> startables, TopicBasedPubSub bus)
        {
            var reporter = new Reporter();

            bus.SubscribeByType <OrderPaid>(reporter);
            bus.SubscribeByType <OrderPlaced>(reporter);


            var cashier = new ThreadedHandler <TakePayment>(new Cashier(bus), "Cashier");

            startables.Add(cashier);
            bus.SubscribeByType(cashier);

            var assMan = new ThreadedHandler <PriceOrder>(new AssistantManager(bus), "Assistant Manager");

            startables.Add(assMan);
            bus.SubscribeByType(assMan);

            var rnd   = new Random(1234);
            var cooks = Enumerable.Range(1, 3).Select(i =>
            {
                var cook = new ThreadedHandler <CookFood>(new Cook(bus, $"cook-{i}", rnd.Next(0, 1000)), "Cook " + i);
                startables.Add(cook);
                return(cook);
            });

            var alarm = new AlarmClock(bus);

            bus.SubscribeByType(alarm);
            startables.Add(alarm);

            var dispatcher = new DroppingHandler <CookFood>(new MoreFairDispatcher <CookFood>(cooks));

            bus.SubscribeByType(dispatcher);
            var waiter = new Waiter(bus);

            return(waiter);
        }
Example #2
0
        public static void Main(string[] args)
        {
            List <IStartable> startables = new List <IStartable>();
            var bus = new TopicBasedPubSub();

            var monitor = new OrderMonitor();

            var waiter = SetUp(startables, bus);

            var coordinator = new ProcessManagerCoordinator(bus);

            StartMonitoring(startables);
            bus.SubscribeByType(coordinator);

            startables.ForEach(x => x.Start());

            for (int i = 0; i < 10; i++)
            {
                var orderId = waiter.PlaceOrder("poo", i % 2 == 0);
                bus.SubscribeByCorrelationId(monitor, orderId);
            }

            Console.ReadLine();
        }
Example #3
0
 public PayFirstProcessManager(TopicBasedPubSub bus)
 {
     _bus = bus;
 }
 public ProcessManagerCoordinator(TopicBasedPubSub bus)
 {
     _bus = bus;
 }