Exemple #1
0
        /// <summary>
        /// Discovers topic and hub URLs based on publisher's content URL and performs subscription request.
        /// </summary>
        /// <param name="parameters">The parameters.</param>
        /// <param name="cancellationToken">The cancellation token to cancel operation.</param>
        /// <returns>The task object representing the asynchronous operation.</returns>
        public async Task <WebSubSubscribedUrls> SubscribeAsync(WebSubSubscribeParameters parameters, CancellationToken cancellationToken)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            WebSubDiscoveredUrls discovery = await _webSubDiscoverer.DiscoverAsync(parameters.ContentUrl, cancellationToken);

            await CallOnDiscovered(parameters, discovery, cancellationToken);

            string subscriptionHubUrl = null;
            Dictionary <string, HttpResponseMessage> hubsResponses = new Dictionary <string, HttpResponseMessage>();

            FormUrlEncodedContent subscribeRequestContent = PrepareSubscribeRequestContent(discovery.Topic, parameters);

            foreach (string hubUrl in discovery.Hubs)
            {
                HttpResponseMessage hubResponse = await _httpClient.PostAsync(hubUrl, subscribeRequestContent, cancellationToken);

                if (hubResponse.StatusCode == HttpStatusCode.Accepted)
                {
                    subscriptionHubUrl = hubUrl;
                    break;
                }
                hubsResponses.Add(hubUrl, hubResponse);
            }

            if (String.IsNullOrWhiteSpace(subscriptionHubUrl))
            {
                throw new WebSubSubscriptionException("None of discovered hubs have accepted the request.", hubsResponses);
            }

            return(new WebSubSubscribedUrls(discovery.Topic, subscriptionHubUrl));
        }
        public async Task Discover_HttpHeaderDiscoveryUrl_DiscoversCorrectTopic()
        {
            WebSubDiscoverer webSubRocksWebSubDiscoverer = PrepareWebSubRocksWebSubDiscoverer();

            WebSubDiscoveredUrls webSubRocksWebSubDiscovery = await webSubRocksWebSubDiscoverer.DiscoverAsync(WebSubRocksConstants.HTTP_HEADER_DISCOVERY_URL, CancellationToken.None);

            Assert.Equal(WebSubRocksConstants.HTTP_HEADER_DISCOVERY_TOPIC_URL, webSubRocksWebSubDiscovery.Topic);
        }
        public async Task Discover_HttpHeaderDiscoveryUrl_DiscoversCorrectHub()
        {
            WebSubDiscoverer webSubRocksWebSubDiscoverer = PrepareWebSubRocksWebSubDiscoverer();

            WebSubDiscoveredUrls webSubRocksWebSubDiscovery = await webSubRocksWebSubDiscoverer.DiscoverAsync(WebSubRocksConstants.HTTP_HEADER_DISCOVERY_URL, CancellationToken.None);

            Assert.Contains(WebSubRocksConstants.HTTP_HEADER_DISCOVERY_HUB_URL, webSubRocksWebSubDiscovery.Hubs);
        }
        public async void Discover_HttpHeaderDiscoveryUrl_DiscoversSingleHub()
        {
            WebSubDiscoverer webSubRocksWebSubDiscoverer = PrepareWebSubRocksWebSubDiscoverer();

            WebSubDiscoveredUrls webSubRocksWebSubDiscovery = await webSubRocksWebSubDiscoverer.DiscoverAsync(WebSubRocksConstants.HTTP_HEADER_DISCOVERY_URL, CancellationToken.None);

            Assert.Single(webSubRocksWebSubDiscovery.Hubs);
        }
        private static Task <WebSubDiscoveredUrls> GetHttpHeaderWebSubDiscovery()
        {
            WebSubDiscoveredUrls webSubDiscovery = new WebSubDiscoveredUrls
            {
                Topic = WebSubRocksConstants.HTTP_HEADER_DISCOVERY_TOPIC_URL
            };

            webSubDiscovery.AddHub(WebSubRocksConstants.HTTP_HEADER_DISCOVERY_HUB_URL);

            return(Task.FromResult(webSubDiscovery));
        }
Exemple #6
0
        private static async Task CallOnDiscovered(WebSubSubscribeParameters parameters, WebSubDiscoveredUrls discovery, CancellationToken cancellationToken)
        {
            parameters.OnDiscovered?.Invoke(discovery);

            if (parameters.OnDiscoveredAsync != null)
            {
                await parameters.OnDiscoveredAsync(discovery, cancellationToken);
            }
        }