コード例 #1
0
ファイル: Transporters_TST.cs プロジェクト: royben/Resonance
        public void Send_Standard_Message()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

            t1.Connect();
            t2.Connect();

            bool received = false;

            t2.MessageReceived += (s, e) =>
            {
                Assert.IsTrue(t1.TotalPendingOutgoingMessages == 0);
                CalculateRequest receivedRequest = e.Message.Object as CalculateRequest;
                Assert.IsTrue(receivedRequest.A == 10 && receivedRequest.B == 15);
                received = true;
            };

            t1.Send(new CalculateRequest()
            {
                A = 10, B = 15
            });

            Thread.Sleep(500);

            Assert.IsTrue(received);

            t1.Dispose(true);
            t2.Dispose(true);
        }
コード例 #2
0
        public void Message_Handler_ACK()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

            t1.Connect();
            t2.Connect();

            bool received = false;

            t2.RegisterMessageHandler <CalculateRequest>((t, message) =>
            {
                received = true;
            });

            t1.Send(new CalculateRequest()
            {
                A = 10, B = 15
            }, new ResonanceMessageConfig()
            {
                RequireACK = true
            });

            Thread.Sleep(500);

            Assert.IsTrue(received);

            t1.Dispose(true);
            t2.Dispose(true);
        }
コード例 #3
0
ファイル: Transporters_TST.cs プロジェクト: royben/Resonance
        public void Send_Standard_Message_With_Error_ACK_And_No_Reporting_Does_Not_Throws_Exception()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

            t1.Connect();
            t2.Connect();

            bool received = false;

            t2.MessageReceived += (s, e) =>
            {
                CalculateRequest receivedRequest = e.Message.Object as CalculateRequest;
                Assert.IsTrue(receivedRequest.A == 10 && receivedRequest.B == 15);
                received = true;

                throw new Exception("Test Error");
            };

            t1.Send(new CalculateRequest()
            {
                A = 10, B = 15
            }, new ResonanceMessageConfig()
            {
                RequireACK = true
            });

            Thread.Sleep(200);

            Assert.IsTrue(received);
            Assert.IsTrue(t1.TotalPendingOutgoingMessages == 0);

            t1.Dispose(true);
            t2.Dispose(true);
        }
コード例 #4
0
ファイル: Transporters_TST.cs プロジェクト: royben/Resonance
        public void Send_Object_Without_Expecting_Response()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

            t1.Connect();
            t2.Connect();

            t2.RequestReceived += (s, e) =>
            {
                CalculateRequest receivedRequest = e.Message.Object as CalculateRequest;
                Assert.IsTrue(receivedRequest.A == 10);
            };

            var request = new CalculateRequest()
            {
                A = 10
            };

            for (int i = 0; i < 1000; i++)
            {
                t1.Send(new CalculateRequest()
                {
                    A = 10
                });
            }

            Assert.IsTrue(t1.TotalPendingOutgoingMessages == 0);

            t1.Dispose(true);
            t2.Dispose(true);
        }
コード例 #5
0
        public void Message_Handler_Async_With_Transporter()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

            t1.Connect();
            t2.Connect();

            Handlers handlers = new Handlers();

            IDisposable handler = t2.CreateHandlerBuilder()
                                  .ForMessage <CalculateRequest>()
                                  .IncludeTransporter()
                                  .IsAsync()
                                  .Build(handlers.HandleMessageAsyncWithTransporter);

            var request = new CalculateRequest()
            {
                A = 10, B = 15
            };

            t1.Send(request);

            TestHelper.WaitWhile(() => _receivedRequest == null, TimeSpan.FromSeconds(5));

            Assert.AreEqual(_receivedRequest.A + _receivedRequest.B, request.A + request.B);
            Assert.AreEqual(_receivedTransporter, t2);

            _receivedRequest = null;

            handler.Dispose();

            t1.Send(request);

            Thread.Sleep(500);

            Assert.IsNull(_receivedRequest);

            t1.Dispose(true);
            t2.Dispose(true);
        }
コード例 #6
0
ファイル: Transporters_TST.cs プロジェクト: royben/Resonance
        public void Send_Standard_Message_ACK_Yes_x1000()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

            t1.Connect();
            t2.Connect();

            ConcurrentList <int> indeces = new ConcurrentList <int>();
            int count = 1;

            Exception exception = null;

            t2.MessageReceived += (s, e) =>
            {
                try
                {
                    CalculateRequest receivedRequest = e.Message.Object as CalculateRequest;
                    Assert.IsTrue(receivedRequest.A == 10 && receivedRequest.B == 15);
                    indeces.Add(count++);
                }
                catch (Exception ex)
                {
                    exception = ex;
                }
            };

            for (int i = 0; i < 1000; i++)
            {
                t1.Send(new CalculateRequest()
                {
                    A = 10, B = 15
                }, new ResonanceMessageConfig()
                {
                    RequireACK = true
                });
            }

            while (count < 1000 && exception == null)
            {
                Thread.Sleep(10);
            }

            if (exception != null)
            {
                Logger.LogError(exception, exception.Message);
            }

            t1.Dispose(true);
            t2.Dispose(true);
        }
コード例 #7
0
        public void Message_Handler_ACK_Throws_Exception()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

            t2.MessageAcknowledgmentBehavior = ResonanceMessageAckBehavior.ReportErrors;
            t1.MessageAcknowledgmentBehavior = ResonanceMessageAckBehavior.ReportErrors;

            t1.Connect();
            t2.Connect();

            bool received = false;

            t2.RegisterMessageHandler <CalculateRequest>((t, message) =>
            {
                received = true;
                throw new Exception("Test Error");
            });

            Assert.ThrowsException <ResonanceResponseException>(() =>
            {
                t1.Send(new CalculateRequest()
                {
                    A = 10, B = 15
                }, new ResonanceMessageConfig()
                {
                    RequireACK = true
                });
            });

            Thread.Sleep(500);

            Assert.IsTrue(received);

            t1.Dispose(true);
            t2.Dispose(true);
        }
コード例 #8
0
ファイル: Transporters_TST.cs プロジェクト: royben/Resonance
        public void Send_Standard_Message_With_ACK()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

            t1.MessageAcknowledgmentBehavior = ResonanceMessageAckBehavior.ReportErrors;
            t2.MessageAcknowledgmentBehavior = ResonanceMessageAckBehavior.ReportErrors;

            t1.Connect();
            t2.Connect();

            bool received = false;

            t2.MessageReceived += (s, e) =>
            {
                Assert.IsTrue(t1.TotalPendingOutgoingMessages == 1);
                CalculateRequest receivedRequest = e.Message.Object as CalculateRequest;
                Assert.IsTrue(receivedRequest.A == 10 && receivedRequest.B == 15);
                received = true;
            };

            t1.Send(new CalculateRequest()
            {
                A = 10, B = 15
            }, new ResonanceMessageConfig()
            {
                RequireACK = true
            });

            Thread.Sleep(200);

            Assert.IsTrue(received);
            Assert.IsTrue(t1.TotalPendingOutgoingMessages == 0);

            t1.Dispose(true);
            t2.Dispose(true);
        }