コード例 #1
0
        public async Task RemoteConnection_should_send_and_decode_Done_message()
        {
            var serverProbe = CreateTestProbe("server");
            var clientProbe = CreateTestProbe("client");

            var serverAddress  = IPAddress.Parse("127.0.0.1");
            var serverEndpoint = new IPEndPoint(serverAddress, 0);

            IChannel server = null;
            IChannel client = null;

            try
            {
                var cts = new CancellationTokenSource();
                cts.CancelAfter(TimeSpan.FromSeconds(10));
                var t1 = RemoteConnection.CreateConnection(Role.Server, serverEndpoint, 3,
                                                           new TestConductorHandler(serverProbe.Ref));
                await t1.WithCancellation(cts.Token);

                server = t1.Result; // task will already be complete or cancelled

                var reachableEndpoint = (IPEndPoint)server.LocalAddress;

                var t2 = RemoteConnection.CreateConnection(Role.Client, reachableEndpoint, 3,
                                                           new PlayerHandler(serverEndpoint, 2, TimeSpan.FromSeconds(1), 3, clientProbe.Ref, Log, Sys.Scheduler));
                await t2.WithCancellation(cts.Token);

                client = t2.Result; // task will already be completed or cancelled

                serverProbe.ExpectMsg("active");
                var serverClientChannel = serverProbe.ExpectMsg <IChannel>();
                clientProbe.ExpectMsg <ClientFSM.Connected>();

                var address = RARP.For(Sys).Provider.DefaultAddress;

                // have the client send a message to the server
                await client.WriteAndFlushAsync(Done.Instance);

                var done = serverProbe.ExpectMsg <Done>();
                done.Should().BeOfType <Done>();

                //have the server send a message back to the client
                await serverClientChannel.WriteAndFlushAsync(Done.Instance);

                var done2 = clientProbe.ExpectMsg <Done>();
                done2.Should().BeOfType <Done>();
            }
            finally
            {
                server?.CloseAsync().Wait(TimeSpan.FromSeconds(2));
                client?.CloseAsync().Wait(TimeSpan.FromSeconds(2));
            }
        }
コード例 #2
0
        public void RemoteConnection_should_send_and_decode_messages()
        {
            var serverProbe = CreateTestProbe("server");
            var clientProbe = CreateTestProbe("client");

            var serverAddress  = IPAddress.Parse("127.0.0.1");
            var serverEndpoint = new IPEndPoint(serverAddress, 0);

            IChannel server = null;
            IChannel client = null;

            try
            {
                var t1 = RemoteConnection.CreateConnection(Role.Server, serverEndpoint, 3,
                                                           new TestConductorHandler(serverProbe.Ref));
                t1.Wait(TimeSpan.FromSeconds(3)).Should().BeTrue();
                server = t1.Result; // task will already be complete or cancelled

                var reachableEndpoint = (IPEndPoint)server.LocalAddress;

                var t2 = RemoteConnection.CreateConnection(Role.Client, reachableEndpoint, 3,
                                                           new PlayerHandler(serverEndpoint, 2, TimeSpan.FromSeconds(1), 3, clientProbe.Ref, Log, Sys.Scheduler));
                t2.Wait(TimeSpan.FromSeconds(3)).Should().BeTrue();
                client = t2.Result; // task will already be completed or cancelled

                serverProbe.ExpectMsg("active");
                var serverClientChannel = serverProbe.ExpectMsg <IChannel>();
                clientProbe.ExpectMsg <ClientFSM.Connected>();

                var address = RARP.For(Sys).Provider.DefaultAddress;

                // have the client send a message to the server
                client.WriteAndFlushAsync(new Hello("test", address));
                var hello = serverProbe.ExpectMsg <Hello>();
                hello.Name.Should().Be("test");
                hello.Address.Should().Be(address);

                // have the server send a message back to the client
                serverClientChannel.WriteAndFlushAsync(new Hello("test2", address));
                var hello2 = clientProbe.ExpectMsg <Hello>();
                hello2.Name.Should().Be("test2");
                hello2.Address.Should().Be(address);
            }
            finally
            {
                server?.CloseAsync().Wait(TimeSpan.FromSeconds(2));
                client?.CloseAsync().Wait(TimeSpan.FromSeconds(2));
            }
        }