예제 #1
0
        public void EnsureAutoUnsubscribeForAsyncSub()
        {
            var subject  = "0be903f6c9c14c10973e78ce03ad47e1";
            var recieved = new ConcurrentQueue <Msg>();

            AsyncContext.Run(async() =>
            {
                using (NATSServer.CreateFastAndVerify(Context.Server1.Port))
                {
                    using (var sync = TestSync.SingleActor())
                    {
                        using (var cn = Context.ConnectionFactory.CreateConnection(Context.Server1.Url))
                        {
                            using (var sub = cn.SubscribeAsync(subject, (_, m) =>
                            {
                                recieved.Enqueue(m.Message);
                                sync.SignalComplete();
                            }))
                            {
                                sub.AutoUnsubscribe(1);

                                cn.Publish(subject, new byte[0]);
                                cn.Publish(subject, new byte[0]);

                                sync.WaitForAll();

                                await Task.Delay(100);
                                Assert.Equal(1, sub.Delivered);
                            }
                        }

                        Assert.Single(recieved);
                    }
                }
            });
        }
예제 #2
0
        public void EnsureRequestAsyncResponder()
        {
            var subject = "6f7c177f910c4ce587d886cc7212a00f";
            var replies = new ConcurrentQueue <Msg>();

            AsyncContext.Run(async() =>
            {
                using (NATSServer.CreateFastAndVerify(Context.Server1.Port))
                {
                    using (var cn = Context.ConnectionFactory.CreateConnection(Context.Server1.Url))
                    {
                        using (cn.SubscribeAsync(subject, (_, m) => m.Message.Respond(m.Message.Data)))
                        {
                            for (var i = 0; i < 5; i++)
                            {
                                replies.Enqueue(await cn.RequestAsync(subject, new[] { (byte)i }));
                            }
                        }
                    }

                    Assert.Equal(5, replies.Count);
                }
            });
        }
예제 #3
0
        public void EnsurePubSubWithAsyncHandler()
        {
            var subject  = "236c9af7eae044f585973503e9803f4a";
            var recieved = new ConcurrentQueue <Msg>();

            AsyncContext.Run(() =>
            {
                using (NATSServer.CreateFastAndVerify(Context.Server1.Port))
                {
                    using (var sync = TestSync.SingleActor())
                    {
                        using (var cn = Context.ConnectionFactory.CreateConnection(Context.Server1.Url))
                        {
                            using (cn.SubscribeAsync(subject, (_, m) =>
                            {
                                recieved.Enqueue(m.Message);
                                if (recieved.Count == 5)
                                {
                                    sync.SignalComplete();
                                }
                            }))
                            {
                                for (var i = 0; i < 5; i++)
                                {
                                    cn.Publish(subject, new[] { (byte)i });
                                }

                                sync.WaitForAll();
                            }
                        }

                        Assert.Equal(5, recieved.Count);
                    }
                }
            });
        }
예제 #4
0
        public void EnsureRequestResponder()
        {
            var subject = "751182b093ea42b68d79b69353bf6266";
            var replies = new ConcurrentQueue <Msg>();

            AsyncContext.Run(() =>
            {
                using (NATSServer.CreateFastAndVerify(Context.Server1.Port))
                {
                    using (var cn = Context.ConnectionFactory.CreateConnection(Context.Server1.Url))
                    {
                        using (cn.SubscribeAsync(subject, (_, m) => m.Message.Respond(m.Message.Data)))
                        {
                            for (var i = 0; i < 5; i++)
                            {
                                replies.Enqueue(cn.Request(subject, new[] { (byte)i }));
                            }
                        }
                    }

                    Assert.Equal(5, replies.Count);
                }
            });
        }