Ejemplo n.º 1
0
        public async Task AcceptorConnectorTest()
        {
            var  address        = Guid.NewGuid().ToString();
            bool isClientClosed = false;
            bool isServerClosed = false;

            var config = new Config {
                DefaultRequestTimeout = System.Threading.Timeout.InfiniteTimeSpan
            };

            using (var transport = new Transport <global::Bond.Box <int>, global::Bond.Box <int> >(config))
                using (var acceptor = transport.MakeServerAcceptor(address, (inMemory, outMemory) => x => Task.FromResult(x)))
                    using (var connector = transport.MakeClientConnector())
                    {
                        var servers        = new List <Transport <global::Bond.Box <int>, global::Bond.Box <int> > .Server>();
                        var newServerEvent = new System.Threading.ManualResetEventSlim(false);

                        acceptor.Accepted += (sender, args) =>
                        {
                            lock (servers)
                            {
                                servers.Add(args.Component);
                            }

                            newServerEvent.Set();
                        };

                        Transport <global::Bond.Box <int>, global::Bond.Box <int> > .Server server;

                        using (var client = await connector.ConnectAsync(address))
                        {
                            newServerEvent.Wait();

                            lock (servers)
                            {
                                Assert.AreEqual(1, servers.Count);
                                server = servers.First();
                            }

                            Assert.IsFalse(server.IsClosed);
                            server.Closed += (sender, args) => { isServerClosed = true; };

                            Assert.IsFalse(client.IsClosed);
                            client.Closed += (sender, args) => { isClientClosed = true; };

                            var request = new global::Bond.Box <int> {
                                value = 100
                            };
                            var response = await client.InvokeAsync(request);

                            Assert.IsTrue(global::Bond.Comparer.Equal(request, response));
                        }

                        server.Dispose();
                    }

            Assert.IsTrue(isClientClosed);
            Assert.IsTrue(isServerClosed);
        }
Ejemplo n.º 2
0
        public async Task AcceptConnectTest()
        {
            var address = Guid.NewGuid().ToString();

            var config = new Config {
                DefaultRequestTimeout = System.Threading.Timeout.InfiniteTimeSpan
            };

            using (var transport = new Transport <global::Bond.Box <int>, global::Bond.Box <int> >(config))
                using (var serversAccessor = transport.AcceptServers(address, (inMemory, outMemory) => x => Task.FromResult(x)))
                    using (var clientAccessor = transport.ConnectClient(address, false))
                    {
                        var request = new global::Bond.Box <int> {
                            value = 200
                        };
                        var response = await clientAccessor.Client.InvokeAsync(request);

                        Assert.IsTrue(global::Bond.Comparer.Equal(request, response));
                    }
        }