Exemple #1
0
        static void Main()
        {
            var bus             = new TopicBasedPubSub();
            var messageListener = new MessageListener(bus);
            var startables      = new List <IStartable>();

            var midgetFactory = new MidgetFactory();
            var midgetHouse   = new MidgetHouse(bus, midgetFactory);

            var consolePrinter = new QueuedHandler <OrderPaid>(Messages.Paid, new ConsolePrintingOrderHandler(bus));

            bus.Subscribe(consolePrinter);

            startables.Add(consolePrinter);
            var cashier       = new Cashier(bus);
            var queuedCashier = new QueuedHandler <TakePayment>(Messages.OrderBilled, cashier);

            bus.Subscribe(queuedCashier);
            startables.Add(queuedCashier);
            startables.Add(cashier);

            var assistantManager = new QueuedHandler <PriceOrder>(Messages.OrderPrepared, new AssistantManager(bus));

            bus.Subscribe(assistantManager);
            startables.Add(assistantManager);

            var chefs = new List <QueuedHandler <CookFood> >();
            var rand  = new Random();

            for (int i = 0; i < NumberOfChefs; i++)
            {
                var chef          = new TimeToLiveDispatcher <CookFood>(new Chef(bus, rand.Next(1000)));
                var queuedHandler = new QueuedHandler <CookFood>(string.Format("Chef {0}", i), chef);
                chefs.Add(queuedHandler);
                startables.Add(queuedHandler);
            }

            var distributionStrategy = new QueuedDispatcher <CookFood>(bus, chefs);

            startables.Add(distributionStrategy);

            foreach (var startable in startables)
            {
                startable.Start();
            }
            var monitor = new Monitor(startables);

            monitor.Start();

            var waiter = new Waiter(bus);

            for (int i = 0; i < 10; i++)
            {
                var correlationId = Guid.NewGuid();

                var orderId = waiter.PlaceOrder(correlationId);
            }

            Console.ReadKey();
        }
Exemple #2
0
 public Handles <IMessage> Create(Order order, TopicBasedPubSub bus)
 {
     if (order.IsDodgy)
     {
         return(new PayFirstProcessManager(bus));
     }
     else
     {
         return(new PayLastProcessManager(bus));
     }
 }
Exemple #3
0
        static void Main()
        {
            var bus = new TopicBasedPubSub();
            var messageListener = new MessageListener(bus);
            var startables = new List<IStartable>();
            
            var midgetFactory = new MidgetFactory();
            var midgetHouse = new MidgetHouse(bus, midgetFactory);

            var consolePrinter = new QueuedHandler<OrderPaid>(Messages.Paid, new ConsolePrintingOrderHandler(bus));
            bus.Subscribe(consolePrinter);

            startables.Add(consolePrinter);
            var cashier = new Cashier(bus);
            var queuedCashier = new QueuedHandler<TakePayment>(Messages.OrderBilled, cashier);
            bus.Subscribe(queuedCashier);
            startables.Add(queuedCashier);
            startables.Add(cashier);

            var assistantManager = new QueuedHandler<PriceOrder>(Messages.OrderPrepared, new AssistantManager(bus));
            bus.Subscribe(assistantManager);
            startables.Add(assistantManager);
          
            var chefs = new List<QueuedHandler<CookFood>>();
            var rand = new Random();
            for (int i = 0; i < NumberOfChefs; i++)
            {
                var chef = new TimeToLiveDispatcher<CookFood>(new Chef(bus, rand.Next(1000)));
                var queuedHandler = new QueuedHandler<CookFood>(string.Format("Chef {0}", i), chef);
                chefs.Add(queuedHandler);
                startables.Add(queuedHandler);
            }

            var distributionStrategy = new QueuedDispatcher<CookFood>(bus, chefs);
            startables.Add(distributionStrategy);

            foreach (var startable in startables)
            {
                startable.Start();
            }
            var monitor = new Monitor(startables);
            monitor.Start();

            var waiter = new Waiter(bus);
            
            for (int i = 0; i < 10; i++)
            {
                var correlationId = Guid.NewGuid();

                var orderId = waiter.PlaceOrder(correlationId);    
            }            

            Console.ReadKey();
        }
        public void PublishAlsoNotifiesCorellationIdSubscriptionTest()
        {
            var handler = Substitute.For <IHandle <TestMessage> >();

            var pubSub      = new TopicBasedPubSub();
            var testMessage = new TestMessage();

            pubSub.SubscribeByCorellationId(testMessage.CorellationId, handler);
            pubSub.Publish(testMessage);

            handler.Received().Handle(Arg.Any <TestMessage>());
        }
        public void SingleSubscriptionPublishTest()
        {
            var handler = Substitute.For <IHandle <TestMessage> >();

            var pubSub = new TopicBasedPubSub();

            pubSub.SubscribeByType(handler);
            pubSub.Publish(new TestMessage());
            pubSub.Publish(new AnotherTestMessage());

            handler.Received().Handle(Arg.Any <TestMessage>());
        }
        public void UnsubscribeTest()
        {
            var handler = Substitute.For <IHandle <TestMessage> >();

            var pubSub = new TopicBasedPubSub();

            pubSub.SubscribeByType(handler);
            pubSub.UnsubscribeByType(handler);

            pubSub.Publish(new TestMessage());

            handler.DidNotReceive().Handle(Arg.Any <TestMessage>());
        }
        public void MultipleSubscriptionsPublishTest()
        {
            var handler1 = Substitute.For <IHandle <TestMessage> >();
            var handler2 = Substitute.For <IHandle <TestMessage> >();

            var pubSub = new TopicBasedPubSub();

            pubSub.SubscribeByType(handler1);
            pubSub.SubscribeByType(handler2);
            pubSub.Publish(new TestMessage());

            handler1.Received().Handle(Arg.Any <TestMessage>());
            handler2.Received().Handle(Arg.Any <TestMessage>());
        }
        public void SubscribeWhenPublishingDoesntThrowTest()
        {
            var handler1 = Substitute.For <IHandle <TestMessage> >();
            var handler2 = Substitute.For <IHandle <TestMessage> >();

            var pubSub = new TopicBasedPubSub();

            handler1
            .When(x => x.Handle(Arg.Any <TestMessage>()))
            .Do(callInfo =>
            {
                Assert.DoesNotThrow(() => pubSub.SubscribeByType(handler2));
            });

            pubSub.SubscribeByType(handler1);
            pubSub.Publish(new TestMessage());

            handler2.DidNotReceive().Handle(Arg.Any <TestMessage>());
        }
        public void NoSubscriptionsPublishDoesntThrowTest()
        {
            var pubSub = new TopicBasedPubSub();

            Assert.DoesNotThrow(() => pubSub.Publish(new TestMessage()));
        }
 public AlarmClock(TopicBasedPubSub bus)
 {
     _bus = bus;
 }