예제 #1
0
        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);
            }
        }
예제 #2
0
        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");
        }
예제 #3
0
		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");
		}