示例#1
0
        public void RemoveSubscription(ISubscription subscription)
        {
            if (subscription == null)
            {
                throw new ArgumentNullException("subscription");
            }

            try
            {
                SubscriptionLock.EnterWriteLock();

                MarkUsed();

                Subscriptions.Remove(subscription);


                if (Subscriptions.Count == 0)
                {
                    // HasSubscriptions -> NoSubscriptions
                    Interlocked.CompareExchange(ref State,
                                                TopicState.NoSubscriptions,
                                                TopicState.HasSubscriptions);
                }
            }
            finally
            {
                SubscriptionLock.ExitWriteLock();
            }
        }
示例#2
0
        public void AddSubscription(ISubscription subscription)
        {
            if (subscription == null)
            {
                throw new ArgumentNullException("subscription");
            }

            try
            {
                SubscriptionLock.EnterWriteLock();

                MarkUsed();

                Subscriptions.Add(subscription);

                // Created -> HasSubscriptions
                Interlocked.CompareExchange(ref State,
                                            TopicState.HasSubscriptions,
                                            TopicState.NoSubscriptions);
            }
            finally
            {
                SubscriptionLock.ExitWriteLock();
            }
        }
示例#3
0
        public void RemoveSubscription(ISubscription subscription)
        {
            if (subscription == null)
            {
                throw new ArgumentNullException("subscription");
            }

            try
            {
                SubscriptionLock.EnterWriteLock();

                _lastUsed = DateTime.UtcNow;

                if (_subscriptionIdentities.Remove(subscription.Identity))
                {
                    Subscriptions.Remove(subscription);
                }

                if (Subscriptions.Count == 0)
                {
                    // Change the state from active -> no subs
                    Interlocked.CompareExchange(ref State, TopicState.NoSubscriptions, TopicState.Active);
                }
            }
            finally
            {
                SubscriptionLock.ExitWriteLock();
            }
        }
示例#4
0
        public void AddSubscription(ISubscription subscription)
        {
            try
            {
                SubscriptionLock.EnterWriteLock();

                _lastUsed = DateTime.UtcNow;

                if (_subcriptionIdentities.Add(subscription.Identity))
                {
                    Subscriptions.Add(subscription);
                }
            }
            finally
            {
                SubscriptionLock.ExitWriteLock();
            }
        }
示例#5
0
        public void AddSubscription(ISubscription subscription)
        {
            if (subscription == null)
            {
                throw new ArgumentNullException("subscription");
            }

            try
            {
                SubscriptionLock.EnterWriteLock();

                _lastUsed = DateTime.UtcNow;

                if (_subscriptionIdentities.Add(subscription.Identity))
                {
                    Subscriptions.Add(subscription);
                }
            }
            finally
            {
                SubscriptionLock.ExitWriteLock();
            }
        }