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