/// <summary>
        /// Asynchronously reads data into the current <see cref="SearchPreview"/>.
        /// </summary>
        /// <param name="reader">
        /// The <see cref="XmlReader"/> from which to read.
        /// </param>
        /// <returns>
        /// A <see cref="Task"/> representing the operation.
        /// </returns>
        public async Task ReadXmlAsync(XmlReader reader)
        {
            Contract.Requires <ArgumentNullException>(reader != null);

            //// Intitialize data members

            this.metadata = new SearchResultMetadata();
            await metadata.ReadXmlAsync(reader).ConfigureAwait(false);

            var results = new List <SearchResult>();

            this.Results = new ReadOnlyCollection <SearchResult>(results);

            //// Read the search preview

            while (!(reader.NodeType == XmlNodeType.EndElement && reader.Name == "results"))
            {
                var result = new SearchResult(this.metadata);

                await result.ReadXmlAsync(reader).ConfigureAwait(false);

                results.Add(result);
                await reader.ReadAsync().ConfigureAwait(false);
            }
        }
Example #2
0
        /// <inheritdoc/>
        public virtual async Task <SearchResult> SendAsync(string eventText, string indexName = null, TransmitterArgs args = null)
        {
            using (var content = new StringContent(eventText))
            {
                var arguments = Enumerable.Empty <Argument>();

                if (indexName != null)
                {
                    arguments = arguments.Concat(new Argument[] { new Argument("index", indexName) });
                }

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

                using (var response = await this.Context.PostAsync(this.Namespace, SimpleReceiver, content, arguments).ConfigureAwait(false))
                {
                    await response.EnsureStatusCodeAsync(HttpStatusCode.OK).ConfigureAwait(false);

                    var reader = response.XmlReader;

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

                    var result = new SearchResult(SearchResultMetadata.Missing);

                    await result.ReadXmlAsync(reader).ConfigureAwait(false);

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

                    return(result);
                }
            }
        }
        /// <summary>
        /// Asynchronously reads data into the current <see cref="SearchPreview"/>.
        /// </summary>
        /// <param name="reader">
        /// The <see cref="XmlReader"/> from which to read.
        /// </param>
        /// <returns>
        /// A <see cref="Task"/> representing the operation.
        /// </returns>
        public async Task ReadXmlAsync(XmlReader reader)
        {
            Contract.Requires<ArgumentNullException>(reader != null);

            //// Intitialize data members
            
            this.metadata = new SearchResultMetadata();
            await metadata.ReadXmlAsync(reader);

            var results = new List<SearchResult>();
            this.Results = new ReadOnlyCollection<SearchResult>(results);

            //// Read the search preview

            while (!(reader.NodeType == XmlNodeType.EndElement && reader.Name == "results"))
            {
                var result = new SearchResult(this.metadata);
                
                await result.ReadXmlAsync(reader);
                results.Add(result);
                await reader.ReadAsync();
            }
        }
        /// <inheritdoc/>
        public virtual async Task<SearchResult> SendAsync(string eventText, string indexName = null, TransmitterArgs args = null)
        {
            using (var content = new StringContent(eventText))
            {
                var arguments = Enumerable.Empty<Argument>();

                if (indexName != null)
                {
                    arguments = arguments.Concat(new Argument[] { new Argument("index", indexName) });
                }

                if (args != null)
                {
                    arguments = arguments.Concat(args);
                }
                
                using (var response = await this.Context.PostAsync(this.Namespace, SimpleReceiver, content, arguments))
                {
                    await response.EnsureStatusCodeAsync(HttpStatusCode.OK);
                    var reader = response.XmlReader;

                    reader.Requires(await reader.MoveToDocumentElementAsync("response"));
                    await reader.ReadElementSequenceAsync("results", "result");

                    var result = new SearchResult(SearchResultMetadata.Missing);
                    
                    await result.ReadXmlAsync(reader);
                    await reader.ReadEndElementSequenceAsync("result", "results", "response");

                    return result;
                }
            }
        }