Esempio n. 1
0
        public void RemoveListener <T>(int sourceId, EventHandler <T> listener) where T : EventArgs
        {
            var eventType  = typeof(T);
            var handlerKey = new SingleHandlerKey(sourceId, eventType, listener);

            EventHandler internalDelegate;

            if (_specificLookup.TryGetValue(handlerKey, out internalDelegate))
            {
                var          eventKey = new SingleEventKey(sourceId, eventType);
                EventHandler invoker;
                if (_specificDelegates.TryGetValue(eventKey, out invoker))
                {
                    invoker -= internalDelegate;
                    if (invoker == null)
                    {
                        _specificDelegates.Remove(eventKey);
                    }
                    else
                    {
                        _specificDelegates[eventKey] = invoker;
                    }
                }

                _specificLookup.Remove(handlerKey);
            }
        }
Esempio n. 2
0
        // TODO: Maybe instead of sourceId take object source and store object.GetHashCode()
        public void AddListener <T>(int sourceId, EventHandler <T> listener) where T : EventArgs
        {
            var eventType = typeof(T);

            var handlerKey = new SingleHandlerKey(sourceId, eventType, listener);

            if (_specificLookup.ContainsKey(handlerKey))
            {
                return;
            }

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

            _specificLookup[handlerKey] = internalDelegate;

            var          eventKey = new SingleEventKey(sourceId, eventType);
            EventHandler invoker;

            if (_specificDelegates.TryGetValue(eventKey, out invoker))
            {
                invoker += internalDelegate;
                _specificDelegates[eventKey] = invoker;
            }
            else
            {
                _specificDelegates[eventKey] = internalDelegate;
            }
        }
Esempio n. 3
0
 protected bool Equals(SingleEventKey other)
 {
     return(_id == other._id && _eventType == other._eventType);
 }