using System; using System.Collections.Generic; using System.Text; namespace TTTCore { class ListenersContainer { private readonly Dictionary> listeners; public ListenersContainer() { listeners = new Dictionary>(); } public void Add(Type messageType, MessageHandler handler) { lock (listeners) { if (!listeners.ContainsKey(messageType)) { listeners[messageType] = new List(); } listeners[messageType].Add(handler); } } public bool Remove(Type messageType, MessageHandler handler) { lock (listeners) { return listeners.ContainsKey(messageType) && listeners[messageType].Remove(handler); } } public IEnumerable GetListeners(Type type, bool returnSubtypes = true) { List handlers = new List(); lock (listeners) { foreach (var kvp in listeners) { if (type.Equals(kvp.Key) || (returnSubtypes && type.IsSubclassOf(kvp.Key))) { handlers.AddRange(kvp.Value); } } } return handlers; } } }