Esempio n. 1
0
        /// <inheritdoc/>
        public virtual async Task <SearchResultStream> ExportSearchResultsAsync(string search, SearchExportArgs args = null)
        {
            var arguments = new Argument[]
            {
                new Argument("search", search)
            }
            .AsEnumerable();

            if (args != null)
            {
                arguments = arguments.Concat(args);
            }

            var response = await this.Context.GetAsync(this.Namespace, SearchJobsExport, arguments).ConfigureAwait(false);

            try
            {
                await response.EnsureStatusCodeAsync(HttpStatusCode.OK).ConfigureAwait(false);

                return(await SearchResultStream.CreateAsync(response).ConfigureAwait(false)); // Transfers response ownership
            }
            catch
            {
                response.Dispose();
                throw;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Asynchronously creates a new <see cref="SearchResultStream"/>
        /// using the specified <see cref="Response"/>.
        /// </summary>
        /// <param name="response">
        /// An object from which search results are read.
        /// </param>
        /// <returns>
        /// A <see cref="SearchResultStream"/> object.
        /// </returns>
        public static async Task <SearchResultStream> CreateAsync(Response response)
        {
            XmlReader reader = response.XmlReader;

            await reader.MoveToDocumentElementAsync("results", "response").ConfigureAwait(false);

            if (reader.Name == "response")
            {
                await response.ThrowRequestExceptionAsync().ConfigureAwait(false);
            }

            var stream = new SearchResultStream(response);

            return(stream);
        }
Esempio n. 3
0
        async Task<SearchResultStream> GetSearchResultsAsync(DispatchState dispatchState, string endpoint, IEnumerable<Argument> args)
        {
            await this.TransitionAsync(dispatchState).ConfigureAwait(false);

            var resourceName = new ResourceName(this.ResourceName, endpoint);
            var response = await this.Context.GetAsync(this.Namespace, resourceName, args).ConfigureAwait(false);

            try
            {
                var searchResults = await SearchResultStream.CreateAsync(response).ConfigureAwait(false);
                return searchResults;
            }
            catch 
            {
                response.Dispose();
                throw;
            }
        }
Esempio n. 4
0
        /// <inheritdoc/>
        public virtual async Task <SearchResultStream> SearchOneShotAsync(string search, int count = 0,
                                                                          JobArgs args             = null, CustomJobArgs customArgs = null)
        {
            var resourceName = JobCollection.ClassResourceName;

            var arguments = new SearchArgs
            {
                Search        = search,
                Count         = count,
                ExecutionMode = ExecutionMode.OneShot
            }
            .AsEnumerable();

            if (args != null)
            {
                arguments = arguments.Concat(args.Where(arg => arg.Name != "exec_mode"));
            }

            if (customArgs != null)
            {
                arguments = arguments.Concat(customArgs);
            }

            Response response = await this.Context.PostAsync(this.Namespace, resourceName, arguments).ConfigureAwait(false);

            try
            {
                await response.EnsureStatusCodeAsync(HttpStatusCode.OK).ConfigureAwait(false);

                var stream = await SearchResultStream.CreateAsync(response).ConfigureAwait(false); // Transfers response ownership

                return(stream);
            }
            catch
            {
                response.Dispose();
                throw;
            }
        }