コード例 #1
0
ファイル: MsmqTransport.cs プロジェクト: OmerMor/Messageless
 public override void OnNext(TransportMessage value)
 {
     using (var mq = getOutgoingQueue(value.RecipientPath))
     {
         value.SenderPath = LocalPath;
         mq.Send(value);
     }
 }
コード例 #2
0
        public void Intercept(IInvocation invocation)
        {
            assertIsValid(invocation.Method);
            // TODO: fix dependency on IoC
            var address = m_address ?? m_target.Configuration.Attributes[WindsorEx.ADDRESS];
            var key = m_target.Configuration.Attributes[WindsorEx.REMOTE_KEY];
            Console.WriteLine("invoking {0} on {1}", invocation, address);
            var ctx = new Context {RecipientKey = key, RecipientPath = address};
            var invocationPayload = new InvocationMessage(ctx, invocation);
            replaceCallbacksWithTokens(invocationPayload);
            var payload = m_serializer.Serialize(invocationPayload);
            var transportMessage = new TransportMessage(payload, address);

            m_transport.OnNext(transportMessage);
        }
コード例 #3
0
ファイル: TimeoutManager.cs プロジェクト: OmerMor/Messageless
        public void ScheduleTimeoutAction(string token, Delegate callback)
        {
            var ctx = MessagelessContext.CurrentContext;
            if (ctx == null)
                return;
            if (ctx.TimeOut == default(TimeSpan))
                return;
            var subscription = Observable
                .Timer(ctx.TimeOut)
                .Select(_ =>
                {
                    var context = new Context { RecipientKey = token, TimeOut = ctx.TimeOut, CallbackTimedOut = true };
                    var callbackMessage = new CallbackMessage(context, callback.GetType(), null);

                    var payload = m_serializer.Serialize(callbackMessage);
                    var transportMessage = new TransportMessage(payload, m_transport.LocalPath);
                    return transportMessage;
                })
                .Finally(() => DismissTimeoutAction(token))
                .Subscribe(m_transport);

            m_timeoutTimers[token] = subscription;
        }
コード例 #4
0
ファイル: MessageHandler.cs プロジェクト: OmerMor/Messageless
        // TODO: use rx oftype
        public void Handle(TransportMessage message)
        {
            try
            {
                var msg = m_serializer.Deserialize(message.Payload);

                if (msg is ITransportAware)
                    (msg as ITransportAware).SetTransportMessage(message);

                if (msg is InvocationMessage)
                {
                    Handle((InvocationMessage)msg);
                }
                else
                {
                    Handle((CallbackMessage)msg);
                }
            }
            catch (Exception ex)
            {
                // TODO: log
                Console.WriteLine(ex);
            }
        }
コード例 #5
0
 public abstract void OnNext(TransportMessage value);
コード例 #6
0
ファイル: VariousTests.cs プロジェクト: OmerMor/Messageless
        public void Poison_message_in_local_queue_should_not_stop_handler()
        {
            // arrange
            m_localContainer.Register(
                Component.For<IService>().LifeStyle.Transient.At(LOCAL_ADDR, SERVICE_KEY, PROXY_KEY),
                Component.For<IService>().Instance(m_service).Named(SERVICE_KEY)
                );

            var proxy = m_localContainer.Resolve<IService>(PROXY_KEY);
            var signal = new AutoResetEvent(false);
            m_service.Stub(s => s.Foo())
                .IgnoreArguments()
                .Call().Action(() => signal.Set());

            // act
            var transport = m_localContainer.Resolve<ITransport>();
            var poisonMsg = new TransportMessage(new byte[] {1, 2, 3}, LOCAL_ADDR);
            transport.OnNext(poisonMsg);
            transport.OnNext(poisonMsg);

            proxy.Foo();

            // assert
            var fooCalled = signal.WaitOne(TimeSpan.FromSeconds(1));
            fooCalled.Should().BeTrue();
        }
コード例 #7
0
 public override void OnNext(TransportMessage value)
 {
     value.SenderPath = LocalPath;
     getSubject(value.RecipientPath).OnNext(value);
 }
コード例 #8
0
 public void SetTransportMessage(TransportMessage transportMessage)
 {
     Context.SenderPath = transportMessage.SenderPath;
 }