Exemplo n.º 1
0
        public void Creation(string url)
        {
            using (var listenSocket = factory.PairOpen().ThenListenAs(out var listener, url).Unwrap())
                using (var dialerSocket = factory.PairOpen().ThenDial(GetDialUrl(listener, url)).Unwrap())
                {
                    listenSocket.SetOpt(nng.Native.Defines.NNG_OPT_SENDTIMEO, new nng_duration {
                        TimeMs = 50
                    });
                    dialerSocket.SetOpt(nng.Native.Defines.NNG_OPT_SENDTIMEO, new nng_duration {
                        TimeMs = 50
                    });

                    dialerSocket.SendMsg(factory.CreateMessage());
                    var msg = listenSocket.RecvMsg().Unwrap();
                    Assert.True(msg.Pipe.IsValid());
                    //Assert.True(msg.Pipe.Socket.IsValid());
                    Assert.False(msg.Pipe.Dialer.IsValid());
                    Assert.True(msg.Pipe.Listener.IsValid());

                    listenSocket.SendMsg(factory.CreateMessage());
                    msg = dialerSocket.RecvMsg().Unwrap();
                    Assert.True(msg.Pipe.IsValid());
                    //Assert.True(msg.Pipe.Socket.IsValid());
                    Assert.True(msg.Pipe.Dialer.IsValid());
                    Assert.False(msg.Pipe.Listener.IsValid());
                }
        }
Exemplo n.º 2
0
        public async Task Issue89_FullDuplexPairWithContexts()
        {
            const int MAX_CLIENT_COUNT = 4;
            string    url         = Util.UrlInproc();
            var       tasks       = new List <Task>();
            var       cts         = new CancellationTokenSource();
            int       numReceived = 0;

            using (var socket = factory.PairOpen().ThenListenAs(out var listener, url).Unwrap())
            {
                listener.Start();

                foreach (var _ in Enumerable.Range(0, MAX_CLIENT_COUNT))
                {
                    var task = Task.Run(async() => {
                        using (var context = socket.CreateAsyncContext(factory).Unwrap())
                        {
                            context.Aio.SetTimeout(100);
                            while (!cts.IsCancellationRequested)
                            {
                                var _s = await context.Send(factory.CreateMessage());
                                var _r = (await context.Receive(cts.Token));
                            }
                        }
                    });
                    tasks.Add(task);
                }

                foreach (var _ in Enumerable.Range(0, MAX_CLIENT_COUNT))
                {
                    var task = Task.Run(async() => {
                        using (var socket = factory.PairOpen().ThenDial(url).Unwrap())
                            using (var context = socket.CreateAsyncContext(factory).Unwrap())
                            {
                                context.Aio.SetTimeout(100);
                                while (!cts.IsCancellationRequested)
                                {
                                    var _s   = await context.Send(factory.CreateMessage());
                                    var recv = (await context.Receive(cts.Token));
                                    if (recv.IsOk())
                                    {
                                        Interlocked.Increment(ref numReceived);
                                    }
                                }
                            }
                    });
                    tasks.Add(task);
                }

                await Util.CancelAfterAssertwait(tasks, cts);
            }

            // TODO: better check that all clients/listeners both send and receive messages
            Assert.True(numReceived > MAX_CLIENT_COUNT * 2);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Create pair socket for pair protocol
 /// </summary>
 /// <param name="factory"></param>
 /// <param name="url"></param>
 /// <param name="isListener"></param>
 /// <typeparam name="T"></typeparam>
 /// <returns></returns>
 public static NngResult <IPairSocket> PairCreate <T>(this IAPIFactory <T> factory, string url, bool isListener) => factory.DialOrListen(factory.PairOpen(), url, isListener);