private void ProcessRemoveListenerAction(RemoveListenerAction removeListenerAction) { if (removeListenerAction != null) { IEventListener eventListener = removeListenerAction.GetEventListener(); if (eventListener != null) { List <WeakReference <IEventListener> > weakReferences; foreach (EventType eventType in eventListener.GetNotifyTypes()) { if (EventTypesToListeners.TryGetValue(eventType, out weakReferences)) { foreach (WeakReference <IEventListener> weakReference in weakReferences) { IEventListener _eventListener; if (weakReference.TryGetTarget(out _eventListener)) { if (_eventListener.Equals(eventListener)) { weakReferences.Remove(weakReference); } } } } } } } }
private void ProcessAddListenerAction(AddListenerAction addListenerAction) { if (addListenerAction != null) { IEventListener eventListener = addListenerAction.GetEventListener(); if (eventListener != null) { List <WeakReference <IEventListener> > weakReferences; foreach (EventType eventType in eventListener.GetNotifyTypes()) { if (!EventTypesToListeners.TryGetValue(eventType, out weakReferences)) { weakReferences = new List <WeakReference <IEventListener> >(); } weakReferences.Add(new WeakReference <IEventListener>(eventListener)); EventTypesToListeners.Add(eventType, weakReferences); } } } }