private void UnregisterSubscriberEventsIfNeeded(IWampRawTopicRouterSubscriber subscriber) { if (subscriber is ISubscriptionNotifier subscriptionNotifier) { UnregisterSubscriberEvents(subscriptionNotifier); } }
public IWampRegistrationSubscriptionToken Subscribe(IWampRawTopicRouterSubscriber subscriber, string topicUri, SubscribeOptions options) { options = options.WithDefaults(); MatchTopicContainer topicContainer = GetInnerContainer(options); return(topicContainer.Subscribe(subscriber, topicUri, options)); }
private void OnSubscriberLeave(IWampRawTopicRouterSubscriber subscriber) { UnregisterSubscriberEventsIfNeeded(subscriber); if (mSubscribers.Count == 0) { RaiseTopicEmpty(); } }
private void UnregisterSubscriberEventsIfNeeded(IWampRawTopicRouterSubscriber subscriber) { ISubscriptionNotifier subscriptionNotifier = subscriber as ISubscriptionNotifier; if (subscriptionNotifier != null) { UnregisterSubscriberEvents(subscriptionNotifier); } }
public IWampRegistrationSubscriptionToken Subscribe(IWampRawTopicRouterSubscriber subscriber, string topicUri, SubscribeOptions options) { lock (mLock) { IWampTopic topic = GetOrCreateTopicByUri(topicUri); IDisposable disposable = topic.Subscribe(subscriber); var result = new SubscriptionToken(topic.SubscriptionId, disposable); return(result); } }
public IDisposable Subscribe(IWampRawTopicRouterSubscriber subscriber) { RegisterSubscriberEventsIfNeeded(subscriber); mSubscribers.Add(subscriber); IDisposable result = Disposable.Create(() => { mSubscribers.Remove(subscriber); OnSubscriberLeave(subscriber); }); return(result); }
public IDisposable Subscribe(IWampRawTopicRouterSubscriber subscriber) { return(mTopic.Subscribe(subscriber)); }