Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace TTTCore
- {
- class ListenersContainer
- {
- private readonly Dictionary<Type, List<MessageHandler>> listeners;
- public ListenersContainer()
- {
- listeners = new Dictionary<Type, List<MessageHandler>>();
- }
- public void Add(Type messageType, MessageHandler handler)
- {
- lock (listeners)
- {
- if (!listeners.ContainsKey(messageType))
- {
- listeners[messageType] = new List<MessageHandler>();
- }
- listeners[messageType].Add(handler);
- }
- }
- public bool Remove(Type messageType, MessageHandler handler)
- {
- lock (listeners)
- {
- return listeners.ContainsKey(messageType) && listeners[messageType].Remove(handler);
- }
- }
- public IEnumerable<MessageHandler> GetListeners(Type type, bool returnSubtypes = true)
- {
- List<MessageHandler> handlers = new List<MessageHandler>();
- lock (listeners)
- {
- foreach (var kvp in listeners)
- {
- if (type.Equals(kvp.Key) || (returnSubtypes && type.IsSubclassOf(kvp.Key)))
- {
- handlers.AddRange(kvp.Value);
- }
- }
- }
- return handlers;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment