Beispiel #1
0
        public void AddListener <T>(EventHandler <T> listener) where T : EventArgs
        {
            var eventType = typeof(T);

            var key = new BroadcastHandlerKey(eventType, listener);

            if (_delegateLookup.ContainsKey(key))
            {
                return;
            }

            EventHandler internalDelegate = (s, e) => listener(s, (T)e);

            _delegateLookup[key] = internalDelegate;

            EventHandler invoker;

            if (_delegates.TryGetValue(eventType, out invoker))
            {
                invoker += internalDelegate;
                _delegates[eventType] = invoker;
            }
            else
            {
                _delegates[eventType] = internalDelegate;
            }
        }
Beispiel #2
0
        public void RemoveListener <T>(EventHandler <T> listener) where T : EventArgs
        {
            var eventType = typeof(T);
            var key       = new BroadcastHandlerKey(eventType, listener);

            EventHandler internalDelegate;

            if (_delegateLookup.TryGetValue(key, out internalDelegate))
            {
                EventHandler invoker;
                if (_delegates.TryGetValue(eventType, out invoker))
                {
                    invoker -= internalDelegate;
                    if (invoker == null)
                    {
                        _delegates.Remove(eventType);
                    }
                    else
                    {
                        _delegates[eventType] = invoker;
                    }
                }

                _delegateLookup.Remove(key);
            }
        }
Beispiel #3
0
 protected bool Equals(BroadcastHandlerKey other)
 {
     return(_eventType == other._eventType && _handler == other._handler);
 }