Ejemplo n.º 1
0
        public void Send_And_Receive_Standard_Request()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

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

            t2.RequestReceived += (s, e) =>
            {
                Assert.IsTrue(t1.TotalPendingOutgoingMessages == 1);
                CalculateRequest receivedRequest = e.Message.Object as CalculateRequest;
                t2.SendResponse(new CalculateResponse()
                {
                    Sum = receivedRequest.A + receivedRequest.B
                }, e.Message.Token);
            };

            var request = new CalculateRequest()
            {
                A = 10, B = 15
            };
            var response = t1.SendRequest <CalculateRequest, CalculateResponse>(request, new ResonanceRequestConfig()
            {
                LoggingMode = ResonanceMessageLoggingMode.Content
            });

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

            Assert.AreEqual(response.Sum, request.A + request.B);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        public void Send_And_Receive_Standard_Request_With_Compression()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

            t1.Encoder.CompressionConfiguration.Enabled = true;
            t2.Encoder.CompressionConfiguration.Enabled = true;

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

            t2.RequestReceived += (s, e) =>
            {
                CalculateRequest receivedRequest = e.Message.Object as CalculateRequest;
                t2.SendResponse(new CalculateResponse()
                {
                    Sum = receivedRequest.A + receivedRequest.B
                }, e.Message.Token);
            };

            var request = new CalculateRequest()
            {
                A = 10, B = 15
            };
            var response = t1.SendRequest <CalculateRequest, CalculateResponse>(request);

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

            Assert.AreEqual(response.Sum, request.A + request.B);
        }
Ejemplo n.º 6
0
        public void Service_Handles_Int32_Property_Get_Set()
        {
            Reset();

            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();

            var testService = new TestService();

            t2.RegisterService <ITestService, TestService>(testService);

            var proxy = t1.CreateClientProxy <ITestService>();

            proxy.Int32Property = 100;

            int value = proxy.Int32Property;

            Assert.AreEqual(value, 100);

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 7
0
        public void Service_Handles_String_Property_Get_Set()
        {
            Reset();

            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();

            var testService = new TestService();

            t2.RegisterService <ITestService, TestService>(testService);

            var proxy = t1.CreateClientProxy <ITestService>();

            proxy.StringProperty = "Test";

            String value = proxy.StringProperty;

            Assert.AreEqual(value, "Test");

            t2.UnregisterService <ITestService>();

            Assert.ThrowsException <ResonanceResponseException>(() =>
            {
                proxy.StringProperty = "Test";
            });

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 8
0
        public void Service_Handles_Request_Async_Method()
        {
            Reset();

            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

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

            var testService = new TestService();

            t2.RegisterService <ITestService, TestService>(testService);

            var proxy = t1.CreateClientProxy <ITestService>();

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

            var response = proxy.CalculateAsync(request).GetAwaiter().GetResult();

            Assert.AreEqual(response.Sum, request.A + request.B);

            t2.UnregisterService <ITestService>();

            Assert.ThrowsException <ResonanceResponseException>(() =>
            {
                proxy.CalculateAsync(request).GetAwaiter().GetResult();
            });

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 9
0
        public void Singleton_Service_2()
        {
            Reset();

            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

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

            t2.RegisterService <ITestService, TestService>(RpcServiceCreationType.Singleton);

            var proxy = t1.CreateClientProxy <ITestService>();

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

            var response = proxy.Calculate(request);

            response = proxy.Calculate(request);

            Assert.IsTrue(TestService.InstanceCount == 1);

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 10
0
        public void Transient_Service_3()
        {
            Reset();

            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

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

            bool funcExecuted = false;

            t2.RegisterService <ITestService, TestService>(RpcServiceCreationType.Transient, () =>
            {
                funcExecuted = true;
                return(new TestService());
            });

            var proxy = t1.CreateClientProxy <ITestService>();

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

            var response = proxy.Calculate(request);

            response = proxy.Calculate(request);

            Assert.IsTrue(funcExecuted);
            Assert.IsTrue(TestService.InstanceCount == 2);

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 11
0
        public void Request_Timeout_Throws_Exception()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

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

            t2.RequestReceived += (s, e) =>
            {
                Thread.Sleep(1000);
                CalculateRequest receivedRequest = e.Message.Object as CalculateRequest;
                t2.SendResponse(new CalculateResponse()
                {
                    Sum = receivedRequest.A + receivedRequest.B
                }, e.Message.Token);
            };

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

            Assert.ThrowsException <TimeoutException>(() =>
            {
                var response = t1.SendRequest <CalculateRequest, CalculateResponse>(request, new ResonanceRequestConfig()
                {
                    Timeout = TimeSpan.FromSeconds(0.5)
                });
            });

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 12
0
        public void Singleton_Service_1()
        {
            Reset();

            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

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

            var testService = new TestService();

            t2.RegisterService <ITestService, TestService>(testService);

            var proxy = t1.CreateClientProxy <ITestService>();

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

            var response = proxy.Calculate(request);

            Assert.AreEqual(response.Sum, request.A + request.B);

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 13
0
        public void Service_Handles_Request_Method_With_Rpc_Attribute_Timeout()
        {
            Reset();

            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

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

            var testService = new TestService();

            t2.RegisterService <ITestService, TestService>(testService);

            var proxy = t1.CreateClientProxy <ITestService>();

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

            var response = proxy.CalculateWithAttributeTimeout(request); //The timeout is 10 seconds while the service method delay is 6 and default timeout is 5 or 2.

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 14
0
        public void Service_Handles_Request_Method_Throws_Exception()
        {
            Reset();

            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

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

            var testService = new TestService();

            t2.RegisterService <ITestService, TestService>(testService);

            var proxy = t1.CreateClientProxy <ITestService>();

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

            Assert.ThrowsException <ResonanceResponseException>(() =>
            {
                proxy.CalculateThrows(request);
            }, "Test Error");

            t2.UnregisterService <ITestService>();

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 15
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);
        }
Ejemplo n.º 16
0
        public void Tcp_Adapter_Writing_Reading()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new TcpAdapter(TcpAdapter.GetLocalIPAddress(), 9999));
            ResonanceTransporter t2 = new ResonanceTransporter();

            ResonanceTcpServer server = new ResonanceTcpServer(9999);

            server.Start();
            server.ConnectionRequest += (x, e) =>
            {
                t2.Adapter = e.Accept();
                t2.Connect();
            };

            t1.Connect();

            while (t2.State != ResonanceComponentState.Connected)
            {
                Thread.Sleep(10);
            }

            TestUtils.Read_Write_Test(this, t1, t2, false, 1000, 5);

            server.Dispose();
        }
Ejemplo n.º 17
0
        public void KeepAlive_Auto_Response()
        {
            if (IsRunningOnAzurePipelines)
            {
                return;
            }

            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

            t1.DefaultRequestTimeout = TimeSpan.FromSeconds(0.5);

            t1.KeepAliveConfiguration.Enabled = true;
            t1.KeepAliveConfiguration.Retries = 1;
            t1.KeepAliveConfiguration.Delay   = TimeSpan.Zero;
            t1.KeepAliveConfiguration.FailTransporterOnTimeout = true;
            t1.KeepAliveConfiguration.Interval = TimeSpan.FromSeconds(0.5);

            t2.KeepAliveConfiguration.Enabled            = false;
            t2.KeepAliveConfiguration.EnableAutoResponse = true;

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

            Thread.Sleep((int)(t1.DefaultRequestTimeout.Add(t1.KeepAliveConfiguration.Interval).TotalMilliseconds * 2));
            Assert.IsTrue(t1.State == ResonanceComponentState.Connected);

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

            Thread.Sleep(1000);
        }
Ejemplo n.º 18
0
        public void Disconnection_Request()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

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

            t2.RequestReceived += (x, e) =>
            {
                t2.SendResponseAsync(new CalculateResponse(), e.Message.Token);
            };

            t1.SendRequest <CalculateRequest, CalculateResponse>(new CalculateRequest());

            t2.Disconnect();

            Thread.Sleep(1000);

            Assert.IsTrue(t1.State == ResonanceComponentState.Failed);
            Assert.IsTrue(t1.FailedStateException is ResonanceConnectionClosedException);

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 19
0
        public void Decoder_Exception_Throws_Exception()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));

            t1.Decoder = new CorruptedDecoder();

            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

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

            t2.RequestReceived += (s, e) =>
            {
                CalculateRequest receivedRequest = e.Message.Object as CalculateRequest; //Should be calculate response...
                t2.SendResponse(new CalculateResponse(), e.Message.Token);
            };

            var request = new CalculateRequest();

            Assert.ThrowsException <CorruptedDecoderException>(() =>
            {
                var response = t1.SendRequest <CalculateRequest, CalculateResponse>(request);
            });

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 20
0
        public void Service_Handles_Message_Method_Primitive_Int32()
        {
            Reset();

            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();

            var testService = new TestService();

            t2.RegisterService <ITestService, TestService>(testService);

            var proxy = t1.CreateClientProxy <ITestService>();

            int s = proxy.GetInt32Value(10);

            Assert.AreEqual(s, 10);

            t2.UnregisterService <ITestService>();

            Assert.ThrowsException <ResonanceResponseException>(() =>
            {
                proxy.GetStringValue("Test");
            });

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 21
0
        public void Transporter_Failes_With_Adapter()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));

            t1.FailsWithAdapter = true;
            t1.Connect();

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


            try
            {
                var response = t1.SendRequest(request);
                Assert.Fail("Expected an exception.");
            }
            catch { }

            Assert.IsTrue(t1.State == ResonanceComponentState.Failed);
            Assert.IsTrue(t1.FailedStateException.InnerException is KeyNotFoundException);
            Assert.IsTrue(t1.FailedStateException.InnerException == t1.Adapter.FailedStateException);

            t1.Dispose(true);
        }
Ejemplo n.º 22
0
        public void Service_Handles_No_Input_Method_Async()
        {
            Reset();

            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();

            var testService = new TestService();

            t2.RegisterService <ITestService, TestService>(testService);

            var proxy = t1.CreateClientProxy <ITestService>();

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

            String s = proxy.GetStringNoInputAsync().GetAwaiter().GetResult();

            Assert.AreEqual(s, "Test");

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 23
0
        public void Service_Handles_DateTime_Property_Get_Set()
        {
            Reset();

            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();

            var testService = new TestService();

            t2.RegisterService <ITestService, TestService>(testService);

            var proxy = t1.CreateClientProxy <ITestService>();

            DateTime date = DateTime.Now;

            proxy.DateProperty = date;

            var value = proxy.DateProperty;

            Assert.AreEqual(value.ToString(), date.ToString());

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 24
0
        public void Service_Handles_Multi_Parameter_Void_Method()
        {
            Reset();
            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();

            var testService = new TestService();

            t2.RegisterService <ITestService, TestService>(testService);

            var proxy = t1.CreateClientProxy <ITestService>();

            proxy.CalculateMultiParameterVoid(10, 5);

            Assert.AreEqual(receivedRequest.A, 10);

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 25
0
        public void Service_Handles_Object_Property_Get_Set()
        {
            Reset();

            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();

            var testService = new TestService();

            t2.RegisterService <ITestService, TestService>(testService);

            var proxy = t1.CreateClientProxy <ITestService>();

            CalculateRequest request = new CalculateRequest()
            {
                A = 1, B = 2
            };

            Assert.IsTrue(proxy.CalculateRequestProperty == null);

            proxy.CalculateRequestProperty = request;

            var value = proxy.CalculateRequestProperty;

            Assert.AreEqual(value.A + value.B, request.A + request.B);

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 26
0
        public void Service_Handles_Request_Method_With_Rpc_Attribute_Timeout_Throws_Exception()
        {
            Reset();

            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

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

            var testService = new TestService();

            t2.RegisterService <ITestService, TestService>(testService);

            var proxy = t1.CreateClientProxy <ITestService>();

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

            Assert.ThrowsException <TimeoutException>(() =>
            {
                var response = proxy.CalculateWithAttributeShortTimeout(request);
            });

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 27
0
        public void NamedPipes_Adapter_Writing_Reading()
        {
            if (IsRunningOnAzurePipelines)
            {
                return;
            }

            ResonanceTransporter t1 = new ResonanceTransporter(new NamedPipesAdapter("Resonance"));
            ResonanceTransporter t2 = new ResonanceTransporter();

            ResonanceNamedPipesServer server = new ResonanceNamedPipesServer("Resonance");

            server.Start();
            server.ConnectionRequest += (x, e) =>
            {
                t2.Adapter = e.Accept();
                t2.Connect();
            };

            t1.Connect();

            while (t2.State != ResonanceComponentState.Connected)
            {
                Thread.Sleep(10);
            }

            TestUtils.Read_Write_Test(this, t1, t2, false, 1000, 5);

            server.Dispose();
        }
Ejemplo n.º 28
0
        public void Send_And_Receive_Standard_Request_With_Encryption()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

            t1.CryptographyConfiguration.Enabled = true;
            t2.CryptographyConfiguration.Enabled = true;

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

            t2.RequestReceived += (s, e) =>
            {
                CalculateRequest receivedRequest = e.Message.Object as CalculateRequest;
                t2.SendResponse(new CalculateResponse()
                {
                    Sum = receivedRequest.A + receivedRequest.B
                }, e.Message.Token);
            };

            t1.RequestReceived += (s, e) =>
            {
                CalculateRequest receivedRequest = e.Message.Object as CalculateRequest;
                t1.SendResponse(new CalculateResponse()
                {
                    Sum = receivedRequest.A + receivedRequest.B
                }, e.Message.Token);
            };

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

            CalculateResponse response1 = null;
            CalculateResponse response2 = null;

            Task.Factory.StartNew(() =>
            {
                response1 = t2.SendRequest <CalculateRequest, CalculateResponse>(request);
                response1 = t2.SendRequest <CalculateRequest, CalculateResponse>(request);
            }).GetAwaiter().GetResult();

            Task.Factory.StartNew(() =>
            {
                response2 = t1.SendRequest <CalculateRequest, CalculateResponse>(request);
                response2 = t1.SendRequest <CalculateRequest, CalculateResponse>(request);
            }).GetAwaiter().GetResult();


            Thread.Sleep(4000);


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

            Assert.AreEqual(response1.Sum, request.A + request.B);
            Assert.AreEqual(response2.Sum, request.A + request.B);
        }
Ejemplo n.º 29
0
        public void Service_Handles_Event_Late_Bound()
        {
            Reset();

            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));
            ResonanceTransporter t2 = new ResonanceTransporter(new InMemoryAdapter("TST"));

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

            var testService = new TestService();

            t2.RegisterService <ITestService, TestService>(testService);

            var proxy = t1.CreateClientProxy <ITestService>();

            List <double> sums = new List <double>();

            proxy.CalculateResponseEvent += (x, response) =>
            {
                sums.Add(response.Sum);
            };

            //Connect after event registration...
            t2.Connect(); //Connect the event receiver first because event registration happens right after connection...
            t1.Connect();

            Thread.Sleep(1000);

            testService.RaiseCalculateResponseEvent(new CalculateResponse()
            {
                Sum = 1
            });
            testService.RaiseCalculateResponseEvent(new CalculateResponse()
            {
                Sum = 2
            });
            testService.RaiseCalculateResponseEvent(new CalculateResponse()
            {
                Sum = 3
            });

            TestHelper.WaitWhile(() => sums.Count < 3, TimeSpan.FromSeconds(5));

            Assert.AreEqual(sums[0], 1);
            Assert.AreEqual(sums[1], 2);
            Assert.AreEqual(sums[2], 3);

            t2.UnregisterService <ITestService>();

            t1.Dispose(true);
            t2.Dispose(true);
        }
Ejemplo n.º 30
0
        public void Transporter_Disposes_Adapter()
        {
            ResonanceTransporter t1 = new ResonanceTransporter(new InMemoryAdapter("TST"));

            t1.NotifyOnDisconnect = false; //This is set so the adapter will not fail on disconnect request and thus will not be disposed but failed.

            t1.Connect();
            t1.Dispose(true);

            Assert.IsTrue(t1.State == ResonanceComponentState.Disposed, "Transporter was not disposed properly.");
            Assert.IsTrue(t1.Adapter.State == ResonanceComponentState.Disposed, "Adapter was not disposed properly.");
        }