public TResponse MakeRequest <TRequest, TResponse>(TRequest message) where TRequest : CashboxMessage { var response = new Magnum.Future <object>(); var channel = new ChannelAdapter(); Exception ex = null; using (channel.Connect(config => { config.AddConsumerOf <ReturnValue>() .UsingConsumer(msg => response.Complete(msg.Value)); config.AddConsumerOf <ReturnException>() .UsingConsumer(msg => ex = msg.Exception); })) { _input.Request(message, channel); if (!response.WaitUntilCompleted(TimeSpan.FromSeconds(180)) && ex != null) { throw ex; } if (response.Value == null) { return(default(TResponse)); } return((TResponse)response.Value); } }
public void Should_receive_the_response_message_type_of_declared_type() { var requestChannel = new ChannelAdapter(); requestChannel.Connect(x => { x.AddConsumerOf <Request <Simple> >() .UsingConsumer(request => request.Respond <Simple, Simple>(new SimpleImpl())) .HandleOnCallingThread(); }); requestChannel.Request <Simple>(_channel); _received.IsCompleted.ShouldBeTrue("Message was not received"); }
public void Should_receive_the_response_message_type_of_declared_type() { var requestChannel = new ChannelAdapter(); requestChannel.Connect(x => { x.AddConsumerOf<Request<Simple>>() .UsingConsumer(request => request.Respond<Simple, Simple>(new SimpleImpl())) .HandleOnCallingThread(); }); requestChannel.Request<Simple>(_channel); _received.IsCompleted.ShouldBeTrue("Message was not received"); }