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 Handles <IMessage> Create(Order order, TopicBasedPubSub bus) { if (order.IsDodgy) { return(new PayFirstProcessManager(bus)); } else { return(new PayLastProcessManager(bus)); } }
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; }