public long Subscribe(ISubscribeRequest <TMessage> request, SubscribeOptions options, string topicUri) { lock (mLock) { WampRawTopic <TMessage> rawTopic; IWampCustomizedSubscriptionId customizedSubscriptionId = mTopicContainer.GetSubscriptionId(topicUri, options); if (!mTopicUriToTopic.TryGetValue(customizedSubscriptionId, out rawTopic)) { rawTopic = CreateRawTopic(topicUri, options, customizedSubscriptionId); IWampRegistrationSubscriptionToken subscriptionToken = mTopicContainer.Subscribe(rawTopic, topicUri, options); long subscriptionId = subscriptionToken.TokenId; mSubscriptionIdToTopic.TryAdd(subscriptionId, rawTopic); rawTopic.SubscriptionId = subscriptionId; rawTopic.SubscriptionDisposable = subscriptionToken; } rawTopic.Subscribe(request, options); return(rawTopic.SubscriptionId); } }
public void Subscribe(ISubscribeRequest <TMessage> request, SubscribeOptions options) { RemoteWampTopicSubscriber remoteSubscriber = new RemoteWampTopicSubscriber(this.SubscriptionId, request.Client as IWampSubscriber); IWampClientProxy <TMessage> client = request.Client; RemoteObserver observer = mSubscriberBook.Subscribe(client); if (!observer.IsOpen) { this.RaiseSubscriptionAdding(remoteSubscriber, options); } request.Subscribed(this.SubscriptionId); if (!observer.IsOpen) { observer.Open(); this.RaiseSubscriptionAdded(remoteSubscriber, options); } }