/// <summary> /// Adds a new subscriber to a certain event. /// </summary> /// <param name="_listener">listener.</param> /// <typeparam name="MiniEvent">The event type.</typeparam> public static void AddListener <MiniEvent>(MiniEventListener <MiniEvent> _listener) where MiniEvent : struct { Type eventType = typeof(MiniEvent); if (!_subscribersList.ContainsKey(eventType)) { _subscribersList[eventType] = new List <MiniEventListenerBase>(); } if (!SubscriptionExists(eventType, _listener)) { var l = _subscribersList[eventType]; if (!l.Contains(_listener)) { _subscribersList[eventType].Add(_listener); } } }
/// <summary> /// Removes a subscriber from a certain event. /// </summary> /// <param name="_listener">listener.</param> /// <typeparam name="MiniMEvent">The event type.</typeparam> public static void RemoveListener <MiniMEvent>(MiniEventListener <MiniMEvent> _listener) where MiniMEvent : struct { Type eventType = typeof(MiniMEvent); if (!_subscribersList.ContainsKey(eventType)) { #if EVENTROUTER_THROWEXCEPTIONS throw new ArgumentException(string.Format("Removing listener \"{0}\", but the event type \"{1}\" isn't registered.", _listener, eventType.ToString())); #else return; #endif } List <MiniEventListenerBase> subscriberList = _subscribersList[eventType]; bool listenerFound = false; for (int i = 0; i < subscriberList.Count; i++) { if (subscriberList[i] == _listener) { subscriberList.Remove(subscriberList[i]); listenerFound = true; if (subscriberList.Count == 0) { _subscribersList.Remove(eventType); } return; } } #if EVENTROUTER_THROWEXCEPTIONS if (!listenerFound) { throw new ArgumentException(string.Format("Removing listener, but the supplied receiver isn't subscribed to event type \"{0}\".", eventType.ToString())); } #endif }
public static void MiniEventStopListening <EventType>(this MiniEventListener <EventType> caller) where EventType : struct { MiniEventManager.RemoveListener <EventType>(caller); }