Beispiel #1
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();
        }
Beispiel #2
0
        /// <summary>
        /// Starts the discovery service.
        /// </summary>
        public async Task StartAsync()
        {
            if (!IsStarted)
            {
                Logger.LogInformation("Starting...");
                Logger.LogDebug("Discovery Info: {@DiscoveryInfo}", DiscoveryInfo);

                _tcpValidationServer = new ResonanceTcpServer(Port);
                _tcpValidationServer.ConnectionRequest += (x, e) =>
                {
                    e.Decline();
                };

                await _tcpValidationServer.StartAsync();

                _timer          = new Timer();
                _timer.Interval = Interval.TotalMilliseconds;
                _timer.Elapsed += (_, __) => BroadcastDiscoveryPacket();
                _timer.Enabled  = true;
                _timer.Start();

                IsStarted = true;
                Logger.LogInformation("Started.");
            }
        }
Beispiel #3
0
        /// <summary>
        /// Starts the service.
        /// </summary>
        private async void Start()
        {
            if (!IsStarted)
            {
                //Start the TCP server.
                IsStarted = true;
                _server   = new ResonanceTcpServer(Port);
                _server.ConnectionRequest += OnConnectionRequest;
                await _server.StartAsync();

                //Start the discovery service.
                _discoveryService.DiscoveryInfo = new DiscoveryInfo()
                {
                    ServiceName = ServiceName, Port = Port
                };
                await _discoveryService.StartAsync();
            }
        }
Beispiel #4
0
        public void Transporters_Router_Standard_Propagates_Connection_Loss()
        {
            IResonanceTransporter receiver1 = null;
            IResonanceTransporter client1   = null;
            IResonanceTransporter receiver2 = null;
            IResonanceTransporter client2   = null;
            TransporterRouter     router    = null;

            ResonanceTcpServer server = new ResonanceTcpServer(1333);

            server.ConnectionRequest += (x, e) =>
            {
                if (receiver1 == null)
                {
                    receiver1 = ResonanceTransporter.Builder.Create()
                                .WithAdapter(e.Accept())
                                .WithJsonTranscoding()
                                .WithKeepAlive(TimeSpan.FromSeconds(1), 1)
                                .Build();

                    receiver1.Connect();
                }
                else
                {
                    receiver2 = ResonanceTransporter.Builder.Create()
                                .WithAdapter(e.Accept())
                                .WithJsonTranscoding()
                                .WithKeepAlive()
                                .Build();

                    receiver2.Connect();

                    router = new TransporterRouter(receiver1, receiver2, RoutingMode.TwoWay, WritingMode.Standard);
                    router.Bind();
                }
            };
            server.Start();


            client1 = ResonanceTransporter.Builder.Create()
                      .WithTcpAdapter()
                      .WithAddress("127.0.0.1")
                      .WithPort(1333)
                      .WithJsonTranscoding()
                      .Build();

            client1.NotifyOnDisconnect = false;
            client1.KeepAliveConfiguration.EnableAutoResponse = false;

            client1.Connect();

            client2 = ResonanceTransporter.Builder.Create()
                      .WithTcpAdapter()
                      .WithAddress("127.0.0.1")
                      .WithPort(1333)
                      .WithJsonTranscoding()
                      .WithKeepAlive()
                      .Build();

            client2.Connect();

            Thread.Sleep(15000);

            client1.Disconnect();

            Assert.IsTrue(client1.State == ResonanceComponentState.Disconnected);
            Assert.IsTrue(receiver1.State == ResonanceComponentState.Failed);
            Assert.IsTrue(receiver2.State == ResonanceComponentState.Disconnected);
            Assert.IsTrue(client2.State == ResonanceComponentState.Failed);


            client1.Dispose();
            client2.Dispose();
            receiver1.Dispose();
            receiver2.Dispose();
            server.Dispose();
            router.Dispose();
        }
Beispiel #5
0
        public void Transporters_Router_Standard_Propagates_Disconnection()
        {
            IResonanceTransporter receiver1 = null;
            IResonanceTransporter client1   = null;
            IResonanceTransporter receiver2 = null;
            IResonanceTransporter client2   = null;
            TransporterRouter     router    = null;

            ResonanceTcpServer server = new ResonanceTcpServer(1333);

            server.ConnectionRequest += (x, e) =>
            {
                if (receiver1 == null)
                {
                    receiver1 = ResonanceTransporter.Builder.Create()
                                .WithAdapter(e.Accept())
                                .WithJsonTranscoding()
                                .Build();

                    receiver1.Connect();
                }
                else
                {
                    receiver2 = ResonanceTransporter.Builder.Create()
                                .WithAdapter(e.Accept())
                                .WithJsonTranscoding()
                                .Build();

                    receiver2.Connect();

                    router = new TransporterRouter(receiver1, receiver2, RoutingMode.TwoWay, WritingMode.Standard);
                    router.Bind();
                }
            };
            server.Start();


            client1 = ResonanceTransporter.Builder.Create()
                      .WithTcpAdapter()
                      .WithAddress("127.0.0.1")
                      .WithPort(1333)
                      .WithJsonTranscoding()
                      .Build();

            client1.Connect();

            client2 = ResonanceTransporter.Builder.Create()
                      .WithTcpAdapter()
                      .WithAddress("127.0.0.1")
                      .WithPort(1333)
                      .WithJsonTranscoding()
                      .Build();

            client2.Connect();

            Thread.Sleep(1000);

            client1.Disconnect();

            Thread.Sleep(500);

            Assert.IsTrue(client1.State == ResonanceComponentState.Disconnected);
            Assert.IsTrue(receiver1.State == ResonanceComponentState.Failed);
            Assert.IsTrue(receiver2.State == ResonanceComponentState.Disconnected);
            Assert.IsTrue(client2.State == ResonanceComponentState.Failed);


            client1.Dispose();
            client2.Dispose();
            receiver1.Dispose();
            receiver2.Dispose();
            server.Dispose();
            router.Dispose();
        }
Beispiel #6
0
        public void Transporters_Router_Standard_Routes_Data()
        {
            IResonanceTransporter receiver1 = null;
            IResonanceTransporter client1   = null;
            IResonanceTransporter receiver2 = null;
            IResonanceTransporter client2   = null;
            TransporterRouter     router    = null;

            ResonanceTcpServer server = new ResonanceTcpServer(1333);

            server.ConnectionRequest += (x, e) =>
            {
                if (receiver1 == null)
                {
                    receiver1 = ResonanceTransporter.Builder.Create()
                                .WithAdapter(e.Accept())
                                .WithJsonTranscoding()
                                .Build();

                    receiver1.Connect();
                }
                else
                {
                    receiver2 = ResonanceTransporter.Builder.Create()
                                .WithAdapter(e.Accept())
                                .WithJsonTranscoding()
                                .Build();

                    receiver2.Connect();

                    router = new TransporterRouter(receiver1, receiver2, RoutingMode.TwoWay, WritingMode.Standard);
                    router.Bind();
                }
            };
            server.Start();


            client1 = ResonanceTransporter.Builder.Create()
                      .WithTcpAdapter()
                      .WithAddress("127.0.0.1")
                      .WithPort(1333)
                      .WithJsonTranscoding()
                      .Build();

            client1.Connect();

            client2 = ResonanceTransporter.Builder.Create()
                      .WithTcpAdapter()
                      .WithAddress("127.0.0.1")
                      .WithPort(1333)
                      .WithJsonTranscoding()
                      .Build();

            client2.Connect();

            client2.RegisterRequestHandler <CalculateRequest, CalculateResponse>((request) =>
            {
                return(new CalculateResponse()
                {
                    Sum = request.A + request.B
                });
            });

            client1.RegisterRequestHandler <CalculateRequest, CalculateResponse>((request) =>
            {
                return(new CalculateResponse()
                {
                    Sum = request.A + request.B
                });
            });

            Thread.Sleep(1000);

            receiver1.RequestReceived += (_, __) =>
            {
                Assert.Fail();
            };

            receiver2.RequestReceived += (_, __) =>
            {
                Assert.Fail();
            };

            var response = client1.SendRequest <CalculateRequest, CalculateResponse>(new CalculateRequest()
            {
                A = 10,
                B = 5
            });

            Assert.AreEqual(response.Sum, 15);

            response = client2.SendRequest <CalculateRequest, CalculateResponse>(new CalculateRequest()
            {
                A = 11,
                B = 5
            });

            Assert.AreEqual(response.Sum, 16);

            client1.Dispose();
            client2.Dispose();
            receiver1.Dispose();
            receiver2.Dispose();
            server.Dispose();
            router.Dispose();
        }
Beispiel #7
0
        public void Tcp_Connect_Send_And_Receive_100_Concurrent_Transporters()
        {
            if (IsRunningOnAzurePipelines)
            {
                return;
            }

            List <IResonanceTransporter> receivers = new List <IResonanceTransporter>();

            ResonanceTcpServer server = new ResonanceTcpServer(4321);

            server.ConnectionRequest += (x, e) =>
            {
                IResonanceTransporter t = ResonanceTransporter.Builder.Create()
                                          .WithAdapter(e.Accept())
                                          .WithJsonTranscoding()
                                          .Build();

                receivers.Add(t);

                t.RegisterRequestHandler <CalculateRequest, CalculateResponse>((request) =>
                {
                    return(new CalculateResponse()
                    {
                        Sum = request.A + request.B
                    });
                });

                t.Connect();
            };

            server.Start();

            List <Thread> threads = new List <Thread>();

            for (int i = 0; i < 100; i++)
            {
                var t = ThreadFactory.StartNew(() =>
                {
                    IResonanceTransporter client = ResonanceTransporter.Builder.Create()
                                                   .WithTcpAdapter()
                                                   .WithAddress("127.0.0.1")
                                                   .WithPort(4321)
                                                   .WithJsonTranscoding()
                                                   .Build();

                    client.Connect();

                    var request = new CalculateRequest()
                    {
                        A = 10, B = 15
                    };
                    var response = client.SendRequest <CalculateRequest, CalculateResponse>(request, new ResonanceRequestConfig()
                    {
                        Timeout = TimeSpan.FromSeconds(5)
                    });

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

                    client.Dispose();
                });

                threads.Add(t);
            }

            TestHelper.WaitWhile(() => threads.Count < 100 || receivers.Count < 100, TimeSpan.FromSeconds(30));

            threads.ForEach(x => x.Join());
            receivers.ForEach(x => x.Dispose());
            server.Dispose();
        }
Beispiel #8
0
        public void Udp_Discovery_And_Tcp_Transporter_Connection()
        {
            ResonanceUdpDiscoveryService <DiscoveryInfoTransporter, JsonEncoder> service =
                new ResonanceUdpDiscoveryService <DiscoveryInfoTransporter, JsonEncoder>(new DiscoveryInfoTransporter()
            {
                TcpServerPort = 9999
            }, 1984);

            service.Start();

            ResonanceUdpDiscoveryClient <DiscoveryInfoTransporter, JsonDecoder> client = new ResonanceUdpDiscoveryClient <DiscoveryInfoTransporter, JsonDecoder>(1984);

            var services = client.Discover(TimeSpan.FromSeconds(10), 1);

            Assert.IsTrue(services.Count == 1);
            Assert.IsTrue(services[0].DiscoveryInfo.TcpServerPort == service.DiscoveryInfo.TcpServerPort);

            service.Dispose();
            client.Dispose();

            var discoveredService = services.First();

            ResonanceTransporter t1 = new ResonanceTransporter(new TcpAdapter(discoveredService.Address, discoveredService.DiscoveryInfo.TcpServerPort));
            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);
            }

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

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

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