Example #1
0
        public void ErlSubscribe()
        {
            const int CNT       = 10;
            const int PERIOD_MS = 250;

            /*
             * ErlApp.Node.TraceLevel = ErlTraceLevel.Send;
             * ErlApp.Node.Trace += (object sender, ErlTraceLevel type, Direction dir, string message) =>
             * {
             * if (message.StartsWith("REGSEND"))
             *  Console.WriteLine(message);
             * };
             */

            var qry = new Query("CRUD.WorldNews")
            {
                new Query.Param("Count", CNT),
                new Query.Param("Period", PERIOD_MS)
            };

            var mail = store.OpenMailbox("News");

            mail.BufferCapacity = 100;

            var callCount = 0;
            var done      = 0;

            mail.Receipt += delegate(Subscription subscription, Mailbox recipient, CRUDSubscriptionEvent data, Exception error)
            {
                if (data.Row != null)
                {
                    System.Threading.Interlocked.Increment(ref callCount);
                    if (callCount >= CNT)
                    {
                        System.Threading.Interlocked.Increment(ref done);
                    }
                }
            };

            var subscribe = store.Subscribe("NewsFeed", qry, mail);

            var sw        = Stopwatch.StartNew();
            var maxWaitMs = 2 * (CNT * PERIOD_MS);

            while (done == 0 && sw.ElapsedMilliseconds < maxWaitMs)
            {
                System.Threading.Thread.Sleep(500);
            }

            Assert.AreEqual(CNT, callCount);

            var buffered = mail.Buffered;

            Console.WriteLine(buffered.ToJSON(JSONWritingOptions.PrettyPrintRowsAsMap));
        }