public void Should_handle_a_proxy_of_t() { var faulted = new Future <Fault>(); var received = new Future <Request <Simple> >(); var engine = new DynamicRoutingEngine(new PoolFiber()); engine.Configure(x => { x.Receive <Fault>(faulted.Complete); x.Receive <Request <Simple> >(received.Complete); }); engine.Send <Request <Simple> >(); var completed = received.WaitUntilCompleted(4.Seconds()); if (faulted.IsCompleted) { Trace.WriteLine("Fault" + faulted.Value.Message); } completed.ShouldBeTrue(); received.Value.ShouldNotBeNull(); }
public void Adding_a_request_message() { _fiber = new SynchronousFiber(); _engine = new DynamicRoutingEngine(_fiber); _engine.Request(new A(), new ShuntChannel()); }
public void Should_have_the_bits_without_the_message_first() { var engine = new DynamicRoutingEngine(new PoolFiber()); var visualizer = new TraceRoutingEngineVisualizer(); var received = new Future <A>(); engine.Configure(x => x.Receive <A>(received.Complete)); var block = new Future <int>(); engine.Add(0, () => { visualizer.Show(engine); block.Complete(0); }); block.WaitUntilCompleted(2.Seconds()); engine.Send(new A()); received.WaitUntilCompleted(2.Seconds()); engine.Send(new B()); var receivedB = new Future <B>(); engine.Configure(x => x.Receive <B>(receivedB.Complete)); received.WaitUntilCompleted(8.Seconds()).ShouldBeTrue(); receivedB.WaitUntilCompleted(8.Seconds()).ShouldBeTrue(); //engine.Receive<A, B>(x => { }); visualizer.Show(engine); }
public void Should_have_the_bits_without_the_message_first() { var engine = new DynamicRoutingEngine(new PoolFiber()); var visualizer = new TraceRoutingEngineVisualizer(); var received = new Future<A>(); engine.Configure(x => x.Receive<A>(received.Complete)); var block = new Future<int>(); engine.Add(0, () => { visualizer.Show(engine); block.Complete(0); }); block.WaitUntilCompleted(2.Seconds()); engine.Send(new A()); received.WaitUntilCompleted(2.Seconds()); engine.Send(new B()); var receivedB = new Future<B>(); engine.Configure(x => x.Receive<B>(receivedB.Complete)); received.WaitUntilCompleted(8.Seconds()).ShouldBeTrue(); receivedB.WaitUntilCompleted(8.Seconds()).ShouldBeTrue(); //engine.Receive<A, B>(x => { }); visualizer.Show(engine); }
public void Should_upconvert_to_a_message_of_t() { var received = new Future<Message<Simple>>(); var engine = new DynamicRoutingEngine(new SynchronousFiber()); engine.Receive<Message<Simple>>(received.Complete); engine.Send(new SimpleImpl()); received.WaitUntilCompleted(2.Seconds()).ShouldBeTrue(); received.Value.ShouldNotBeNull(); }
public void Should_upconvert_to_a_request_of_t() { var received = new Future<Request<Simple>>(); var engine = new DynamicRoutingEngine(new PoolFiber()); engine.Configure(x => x.Receive<Request<Simple>>(received.Complete)); engine.Send(new SimpleImpl()); received.WaitUntilCompleted(6.Seconds()).ShouldBeTrue(); received.Value.ShouldNotBeNull(); }
public void Should_upconvert_to_a_request_of_t() { var received = new Future <Request <Simple> >(); var engine = new DynamicRoutingEngine(new PoolFiber()); engine.Configure(x => x.Receive <Request <Simple> >(received.Complete)); engine.Send(new SimpleImpl()); received.WaitUntilCompleted(6.Seconds()).ShouldBeTrue(); received.Value.ShouldNotBeNull(); }
bool RunTest <T1, T2>(int consumerCount, int messageCount, Future <int> complete, Func <T1> value1Provider, Func <T2> value2Provider, out int totalMessageCount) { var engine = new DynamicRoutingEngine(new PoolFiber()); int joinCount = (messageCount / 2) * (messageCount / 2) * consumerCount; totalMessageCount = consumerCount * messageCount + joinCount; var latch = new CountdownLatch(totalMessageCount, complete.Complete); int countA = 0; int countB = 0; int countC = 0; engine.Configure(x => { for (int i = 0; i < consumerCount; i++) { x.Receive <A>(m => { Interlocked.Increment(ref countA); latch.CountDown(); }); x.Receive <B>(m => { Interlocked.Increment(ref countB); latch.CountDown(); }); } }); //var visualizer = new RoutingEngineTextVisualizer(); //visualizer.Output = s => Console.WriteLine(s); //visualizer.Visit(engine); for (int i = 0; i < messageCount; i += 2) { engine.Send(value1Provider()); engine.Send(value2Provider()); } bool waitUntilCompleted = complete.WaitUntilCompleted(30.Seconds()); Console.WriteLine("Consumed A: " + countA); Console.WriteLine("Consumed B: " + countB); Console.WriteLine("Consumed C: " + countC); return(waitUntilCompleted); }
public void Two_receives_are_posted_for_a_message() { _first = new Future<IBottom>(); _second = new Future<IBottom>(); _engine = new DynamicRoutingEngine(new SynchronousFiber()); _engine.Configure(x => { x.Receive<IBottom>(_first.Complete); x.Receive<IBottom>(_second.Complete); }); _engine.Send(new OverTheTop()); }
public void Should_match_a_join_node() { RoutingEngine engine = new DynamicRoutingEngine(new PoolFiber()); var called = new Future<Message<A>>(); engine.Configure(x => { x.Receive<Message<A>>(called.Complete); }); engine.Send<Message<A>>(new MessageImpl<A>(new A())); called.WaitUntilCompleted(5.Seconds()).ShouldBeTrue("Message was not delivered"); // new RoutingEngineTextVisualizer().Visit(engine); }
public void Two_receives_are_posted_for_a_message() { _first = new Future <IBottom>(); _second = new Future <IBottom>(); _engine = new DynamicRoutingEngine(new SynchronousFiber()); _engine.Configure(x => { x.Receive <IBottom>(_first.Complete); x.Receive <IBottom>(_second.Complete); }); _engine.Send(new OverTheTop()); }
public void Should_match_a_join_node() { RoutingEngine engine = new DynamicRoutingEngine(new PoolFiber()); var called = new Future <Message <A> >(); engine.Configure(x => { x.Receive <Message <A> >(called.Complete); }); engine.Send <Message <A> >(new MessageImpl <A>(new A())); called.WaitUntilCompleted(5.Seconds()).ShouldBeTrue("Message was not delivered"); // new RoutingEngineTextVisualizer().Visit(engine); }
public void Should_properly_invoke_the_message_receiver() { RoutingEngine engine = new DynamicRoutingEngine(new SynchronousFiber()); Future<A> receivedA = new Future<A>(); Future<B> receivedB = new Future<B>(); engine.Receive<A>(receivedA.Complete); engine.Receive<B>(receivedB.Complete); engine.Send(new B()); receivedA.WaitUntilCompleted(2.Seconds()).ShouldBeTrue("A not received"); receivedB.WaitUntilCompleted(2.Seconds()).ShouldBeTrue("B not received"); }
public void Should_display_the_empty_network() { var received = new Future<A>(); var engine = new DynamicRoutingEngine(new PoolFiber()); engine.Send(new A()); Trace.WriteLine("Before Receive"); var visualizer = new TraceRoutingEngineVisualizer(); visualizer.Show(engine); engine.Configure(x => x.Receive<A>(received.Complete)); Trace.WriteLine("After Receive"); visualizer.Show(engine); received.WaitUntilCompleted(2.Seconds()).ShouldBeTrue(); }
public void Should_display_the_empty_network() { var received = new Future <A>(); var engine = new DynamicRoutingEngine(new PoolFiber()); engine.Send(new A()); Trace.WriteLine("Before Receive"); var visualizer = new TraceRoutingEngineVisualizer(); visualizer.Show(engine); engine.Configure(x => x.Receive <A>(received.Complete)); Trace.WriteLine("After Receive"); visualizer.Show(engine); received.WaitUntilCompleted(2.Seconds()).ShouldBeTrue(); }
public void Should_navigate_properly() { RoutingEngine engine = new DynamicRoutingEngine(new PoolFiber()); var foundA = new Future<AlphaNode<Message<A>>>(); var foundJoin = new Future<JoinNode<Message<A>>>(); engine.Configure(x => { new MatchAlphaNode<Message<A>>(engine, alphaNode => { foundA.Complete(alphaNode); new MatchJoinNode<Message<A>>(alphaNode, joinNode => { foundJoin.Complete(joinNode); }); }); }); foundA.WaitUntilCompleted(5.Seconds()).ShouldBeTrue("Message A alpha node not found"); foundJoin.WaitUntilCompleted(5.Seconds()).ShouldBeTrue("Message A constant join node not found"); // new RoutingEngineTextVisualizer().Visit(engine); }
public void Should_navigate_properly() { RoutingEngine engine = new DynamicRoutingEngine(new PoolFiber()); var foundA = new Future <AlphaNode <Message <A> > >(); var foundJoin = new Future <JoinNode <Message <A> > >(); engine.Configure(x => { new MatchAlphaNode <Message <A> >(engine, alphaNode => { foundA.Complete(alphaNode); new MatchJoinNode <Message <A> >(alphaNode, joinNode => { foundJoin.Complete(joinNode); }); }); }); foundA.WaitUntilCompleted(5.Seconds()).ShouldBeTrue("Message A alpha node not found"); foundJoin.WaitUntilCompleted(5.Seconds()).ShouldBeTrue("Message A constant join node not found"); // new RoutingEngineTextVisualizer().Visit(engine); }
public void Should_handle_a_proxy_of_t() { var faulted = new Future<Fault>(); var received = new Future<Request<Simple>>(); var engine = new DynamicRoutingEngine(new PoolFiber()); engine.Configure(x => { x.Receive<Fault>(faulted.Complete); x.Receive<Request<Simple>>(received.Complete); }); engine.Send<Request<Simple>>(); var completed = received.WaitUntilCompleted(4.Seconds()); if(faulted.IsCompleted) { Trace.WriteLine("Fault" + faulted.Value.Message); } completed.ShouldBeTrue(); received.Value.ShouldNotBeNull(); }
public DynamicRoutingEngineConfiguratorContext(DynamicRoutingEngine engine) { _engine = engine; }
public DynamicRoutingEngineConfigurator(DynamicRoutingEngine engine) { _engine = engine; _configurators = new List<RoutingConfigurator>(); }
protected override bool Visit(DynamicRoutingEngine engine) { AppendLine(engine.GetType().ToShortTypeName()); return(base.Visit(engine)); }
public void An_inheritance_chain_is_part_of_a_message() { _engine = new DynamicRoutingEngine(new SynchronousFiber()); _engine.Send(new OverTheTop()); }
protected virtual bool Visit(DynamicRoutingEngine engine) { Visit(engine.Root); return(true); }
public DynamicRoutingEngineConfigurator(DynamicRoutingEngine engine) { _engine = engine; _joinNodes = new DictionaryCache <Type, object>(); }