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