Esempio n. 1
0
        public void Subscribe <TEvent>(Infrastructure.ISubscriber <TEvent> subscriber)
        {
            ThrowIfNull(subscriber);
            if (_draining == 1)
            {
                return;
            }

            Type key = typeof(TEvent);

            if (_lazyContainer.Value.ContainsKey(key))
            {
                if (_lazyContainer.Value[key].Contains(subscriber))
                {
                    throw new InvalidOperationException("Type has been already subscribed.");
                }
                else
                {
                    _lazyContainer.Value[key].Add(subscriber);
                }
            }
            else
            {
                if (_lazyContainer.Value.TryAdd(key, new HashSet <object>()))
                {
                    Interlocked.Increment(ref _groupCount);
                    _lazyContainer.Value[key].Add(subscriber);
                }
            }
        }
Esempio n. 2
0
        public void Unsubscribe <TEvent>(Infrastructure.ISubscriber <TEvent> subscriber)
        {
            ThrowIfNull(subscriber);
            if (_draining == 1)
            {
                return;
            }

            Type key = typeof(TEvent);

            if (_lazyContainer.Value.ContainsKey(key))
            {
                if (_lazyContainer.Value[key].Contains(subscriber))
                {
                    _lazyContainer.Value[key].Remove(subscriber);
                }
            }
        }