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]); } }
/// <summary> /// Wss message handler /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected override void OnMessage(object sender, WebSocketMessage e) { _messageHandler.HandleNewMessage(e); }