public void AddListener <TDataType>(Delegates.Listener listener) where TDataType : EventData { if (listener == null) { throw new ArgumentNullException(nameof(listener)); } if (IsDispatching) { throw new InvalidOperationException("Cannot add listeners while dispatching"); } var name = EventUtils.EventName <TDataType>(); InternalAddListener <TDataType>(name, new PlainInvoker(listener)); }
public void AddListener <TDataType>(string name, Delegates.Listener listener) where TDataType : EventData { ValidateName(name); if (listener == null) { throw new ArgumentNullException(nameof(listener)); } if (IsDispatching) { throw new InvalidOperationException("Cannot add listeners while dispatching"); } InternalAddListener <TDataType>(name, new PlainInvoker(listener)); }
public void RemoveListener(Delegates.Listener listener) { if (listener == null) { throw new ArgumentNullException(nameof(listener)); } if (IsDispatching) { throw new InvalidOperationException("Cannot remove listeners while dispatching"); } foreach (var metaData in _events) { metaData.Value.Listeners.RemoveAll(invoker => ReferenceEquals(invoker.Target, listener)); } }
public void AddListeners <TDataType>(string[] names, Delegates.Listener listener) where TDataType : EventData { if (names == null) { throw new ArgumentNullException(nameof(names)); } if (listener == null) { throw new ArgumentNullException(nameof(listener)); } if (IsDispatching) { throw new InvalidOperationException("Cannot add listeners while dispatching"); } foreach (var name in names) { AddListener <TDataType>(name, listener); } }
public void RemoveListener(string name, Delegates.Listener listener) { ValidateName(name); if (listener == null) { throw new ArgumentNullException(nameof(listener)); } if (IsDispatching) { throw new InvalidOperationException("Cannot remove listeners while dispatching"); } if (_events.TryGetValue(name, out var metaData)) { var index = metaData.Listeners.FindIndex(invoker => invoker.Delegate.Equals(listener)); if (index != -1) { metaData.Listeners.RemoveAt(index); } } }
public PlainInvoker(Delegates.Listener listener) { Listener = listener ?? throw new ArgumentNullException(nameof(listener)); }
public void AddListeners(string[] names, Delegates.Listener listener) { AddListeners <EmptyEventData>(names, listener); }
public void AddListener(string name, Delegates.Listener listener) { AddListener <EmptyEventData>(name, listener); }