Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }