// for internal use public List <Message> GetMessagesInternal(DateTime timeStamp) { var result = new List <Message>(); var messageRooms = messages.GetKeys(); foreach (var room in messageRooms) { var messagesInRoom = messages.ReceiveValue(room).ToList(); for (var messageIndex = messagesInRoom.Count - 1; messageIndex >= 0; messageIndex--) { var message = messagesInRoom[messageIndex]; if (message.TimeStamp <= timeStamp) // using message ordering in 'messages' { break; } result.Insert(0, new Message(message)); } } return(result); }