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); }
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); } } }