示例#1
0
        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));
        }
示例#2
0
        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));
        }
示例#3
0
        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));
            }
        }
示例#4
0
        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);
            }
        }
示例#5
0
        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);
                }
            }
        }
示例#6
0
 public PlainInvoker(Delegates.Listener listener)
 {
     Listener = listener ?? throw new ArgumentNullException(nameof(listener));
 }
示例#7
0
 public void AddListeners(string[] names, Delegates.Listener listener)
 {
     AddListeners <EmptyEventData>(names, listener);
 }
示例#8
0
 public void AddListener(string name, Delegates.Listener listener)
 {
     AddListener <EmptyEventData>(name, listener);
 }