Exemple #1
0
        public PresenceDocument Subscribe(string subscriptionId, string publisherId, int expires)
        {
            PresenceDocument document;
            var exriresKey = new SubscriptionExpiresKey(publisherId, subscriptionId);

            if (expires > 0)
            {
                var publication  = GetValidPublication(publisherId, true);
                var subscription = new Subscription(subscriptionId, expires);

                publication.Subscriptions.Replace(subscription);

                subscriptionTimer.Change(exriresKey, (expires + 10) * 1000);

                document = publication.Document;
            }
            else
            {
                var publication = GetValidPublication(publisherId, false);

                if (publication != null)
                {
                    if (publication.Subscriptions.RemoveFirst(subscriptionId, IsSubscriptionIdEquals))
                    {
                        OnSubscriptionRemoved(subscriptionId);
                    }
                }

                subscriptionTimer.Remove(exriresKey);

                document = null;
            }

            return(document);
        }
Exemple #2
0
        private void SubscriptionExpired(SubscriptionExpiresKey key)
        {
            Publication publication;

            if (publications.TryGetValue(key.PublicationId, out publication))
            {
                if (publication.Subscriptions.RemoveFirst(key.SubscriptionId, IsSubscriptionIdEquals))
                {
                    OnSubscriptionRemoved(key.SubscriptionId);
                    OnSubscriptionExpired(key.PublicationId, key.SubscriptionId);
                }
            }
        }