Guest User

Untitled

a guest
Feb 8th, 2020
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.51 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace TTTCore
  6. {
  7.     class ListenersContainer
  8.     {
  9.         private readonly Dictionary<Type, List<MessageHandler>> listeners;
  10.  
  11.         public ListenersContainer()
  12.         {
  13.             listeners = new Dictionary<Type, List<MessageHandler>>();
  14.         }
  15.  
  16.         public void Add(Type messageType, MessageHandler handler)
  17.         {
  18.             lock (listeners)
  19.             {
  20.                 if (!listeners.ContainsKey(messageType))
  21.                 {
  22.                     listeners[messageType] = new List<MessageHandler>();
  23.                 }
  24.                 listeners[messageType].Add(handler);
  25.             }
  26.         }
  27.  
  28.         public bool Remove(Type messageType, MessageHandler handler)
  29.         {
  30.             lock (listeners)
  31.             {
  32.                 return listeners.ContainsKey(messageType) && listeners[messageType].Remove(handler);
  33.             }
  34.         }
  35.  
  36.         public IEnumerable<MessageHandler> GetListeners(Type type, bool returnSubtypes = true)
  37.         {
  38.             List<MessageHandler> handlers = new List<MessageHandler>();
  39.             lock (listeners)
  40.             {
  41.                 foreach (var kvp in listeners)
  42.                 {
  43.                     if (type.Equals(kvp.Key) || (returnSubtypes && type.IsSubclassOf(kvp.Key)))
  44.                     {
  45.                         handlers.AddRange(kvp.Value);
  46.                     }
  47.                 }
  48.             }
  49.             return handlers;
  50.         }
  51.     }
  52. }
Advertisement
Add Comment
Please, Sign In to add comment