public void MessagesHandledCorrectly()
        {
            const int expectedCount = 10000;
            var       numbers       = new List <string>();

            void Action(string number) => numbers.Add(number);

            var handler = new BrokerageConcurrentMessageHandler <string>(Action);

            var task = Task.Factory.StartNew(() =>
            {
                var counter = 0;
                for (var i = 0; i < expectedCount; i++)
                {
                    handler.HandleNewMessage($"{Interlocked.Increment(ref counter)}");

                    if (i % 50 == 0)
                    {
                        Thread.Sleep(1);
                    }
                }
            });

            for (var i = 0; i < expectedCount;)
            {
                handler.WithLockedStream(() =>
                {
                    // place order
                    i++;
                });

                if (i % 50 == 0)
                {
                    Thread.Sleep(1);
                }
            }

            if (!task.Wait(TimeSpan.FromSeconds(5)))
            {
                Assert.Fail("BrokerageConcurrentMessageHandlerTests.MessagesHandledCorrectly(): timeout waiting for task to finish");
            }

            // all processed
            Assert.AreEqual(expectedCount, numbers.Count);

            for (var i = 0; i < numbers.Count; i++)
            {
                // all in order
                Assert.AreEqual($"{i + 1}", numbers[i]);
            }
        }
Пример #2
0
 /// <summary>
 /// Wss message handler
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected override void OnMessage(object sender, WebSocketMessage e)
 {
     _messageHandler.HandleNewMessage(e);
 }