/// <summary> /// The method unsubscribes specified listener with a given identifier /// </summary> /// <param name="listenerId">An identifier of a listener</param> public void Unsubscribe(uint listenerId) { if (listenerId >= mListeners.Count) { throw new ListenerDoesntExistException(listenerId); } mListeners[(int)listenerId] = new TListenerEntry() { }; mFreeEntriesRegistry.Push((int)listenerId); }
/// <summary> /// The method subscribes a listener to the manager /// </summary> /// <param name="eventListener">A reference to IEventListener implementation</param> /// <typeparam name="T">A type of an event</typeparam> /// <returns></returns> public uint Subscribe <T>(IEventListener eventListener) where T : struct { if (eventListener == null) { throw new ArgumentNullException("eventListener"); } int firstFreeEntryIndex = mFreeEntriesRegistry.Count > 0 ? mFreeEntriesRegistry.Pop() : mListeners.Count; if (firstFreeEntryIndex >= mListeners.Count) { mListeners.Add(new TListenerEntry { }); } mListeners[firstFreeEntryIndex] = new TListenerEntry() { mEventType = typeof(T), mListener = eventListener }; return((uint)firstFreeEntryIndex); }