using System; using System.Collections.Generic; using System.Linq; namespace Encompass { internal class MessageManager { private readonly Dictionary> messageTypeToMessages = new Dictionary>(); internal void AddMessage(TMessage message) where TMessage : struct, IMessage { if (!messageTypeToMessages.ContainsKey(typeof(TMessage))) { messageTypeToMessages.Add(typeof(TMessage), new List()); } messageTypeToMessages[typeof(TMessage)].Add(message); } internal void AddMessage(IMessage message) { var type = message.GetType(); if (!messageTypeToMessages.ContainsKey(type)) { messageTypeToMessages.Add(type, new List()); } messageTypeToMessages[type].Add(message); } internal void ClearMessages() { foreach (var entry in messageTypeToMessages) { entry.Value.Clear(); } } internal IEnumerable GetMessagesByType() where TMessage : struct, IMessage { return messageTypeToMessages.ContainsKey(typeof(TMessage)) ? messageTypeToMessages[typeof(TMessage)].Cast() : Enumerable.Empty(); } } }