Ejemplo n.º 1
0
        public void TestLazyAndMuxWrite()
        {
            UsePipeWithMuxer((a, b, mux) =>
            {
                mux.AddHandler("/a", null);
                mux.AddHandler("/b", null);
                mux.AddHandler("/c", null);

                var doneTask = Task.Factory.StartNew(() =>
                {
                    var selected = mux.Negotiate(a);
                    Assert.Equal("/c", selected.Protocol);

                    var msg = Encoding.UTF8.GetBytes("hello");
                    a.Write(msg, 0, msg.Length);
                });

                var lb       = Multistream.CreateSelect(b, "/c");
                var msgin    = new byte[5];
                var received = lb.Read(msgin, 0, msgin.Length);
                Assert.Equal(received, msgin.Length);
                Assert.Equal("hello", Encoding.UTF8.GetString(msgin));

                Assert.True(doneTask.Wait(500));

                VerifyPipe(a, lb);
            });
        }
Ejemplo n.º 2
0
        public void TestLazyAndMux()
        {
            UsePipeWithMuxer((a, b, mux) =>
            {
                mux.AddHandler(new TestHandler("/a", null));
                mux.AddHandler(new TestHandler("/b", null));
                mux.AddHandler(new TestHandler("/c", null));

                var task = Task.Factory.StartNew(() =>
                {
                    var selected = mux.Negotiate(a);
                    Assert.Equal("/c", selected.Protocol);

                    var msg       = new byte[5];
                    var bytesRead = a.Read(msg, 0, msg.Length);
                    Assert.Equal(bytesRead, msg.Length);
                });

                var lb     = Multistream.CreateSelect(b, "/c");
                var outmsg = Encoding.UTF8.GetBytes("hello");
                lb.Write(outmsg, 0, outmsg.Length);

                Assert.True(task.Wait(500));

                VerifyPipe(a, lb);
            });
        }
Ejemplo n.º 3
0
        public Task Async_TestInvalidProtocol()
        {
            return(UsePipeWithMuxerAsync(async(a, b, mux) =>
            {
                mux.NegotiateAsync(a, CancellationToken.None);

                var ms = Multistream.Create(b, "/THIS_IS_WRONG");

                await Assert.ThrowsAsync <Exception>(() => ms.WriteAsync(Array.Empty <byte>(), 0, 0));
            }));
        }
Ejemplo n.º 4
0
        public void TestInvalidProtocol()
        {
            UsePipeWithMuxer((a, b, mux) =>
            {
                Task.Factory.StartNew(() => mux.Negotiate(a));

                var ms = Multistream.Create(b, "/THIS_IS_WRONG");

                Assert.Throws <AggregateException>(() => ms.Write(Array.Empty <byte>(), 0, 0));
            });
        }
Ejemplo n.º 5
0
        public void TestLazyConns()
        {
            UsePipeWithMuxer((a, b, mux) =>
            {
                mux.AddHandler(new TestHandler("/a", null));
                mux.AddHandler(new TestHandler("/b", null));
                mux.AddHandler(new TestHandler("/c", null));

                var la = Task.Factory.StartNew(() => Multistream.CreateSelect(a, "/c"));
                var lb = Task.Factory.StartNew(() => Multistream.CreateSelect(b, "/c"));

                Task.WhenAll(la, lb).ContinueWith(t => VerifyPipe(t.Result[0], t.Result[1]));
            });
        }
Ejemplo n.º 6
0
        public Task Async_TestLazyConns()
        {
            return(UsePipeWithMuxerAsync(async(a, b, mux) =>
            {
                mux.AddHandler(new TestHandler("/a", null));
                mux.AddHandler(new TestHandler("/b", null));
                mux.AddHandler(new TestHandler("/c", null));

                var la = Task.Factory.StartNew(() => Multistream.CreateSelect(a, "/c"));
                var lb = Task.Factory.StartNew(() => Multistream.CreateSelect(b, "/c"));

                var result = await Task.WhenAll(la, lb);
                await VerifyPipeAsync(result[0], result[1]);
            }));
        }
Ejemplo n.º 7
0
        private async Task <INetworkStream> NewStream(PeerId peer, ProtocolId pid, CancellationToken cancellationToken)
        {
            var s = await Network.NewStreamAsync(peer, cancellationToken);

            if (s == null)
            {
                return(null);
            }

            s.Protocol = pid;
            //wrap reporter

            var con = Multistream.CreateSelect(((IReadWriter)s).AsSystemStream(), pid);

            return(new StreamWrapper(s, con.AsReadWriter()));
        }