Exemple #1
0
        private async Task <List <T> > IterateThroughPaginationAsync <T>(LightspeedRequest r, T response)
        {
            var additionalResponses = new List <T>();

            if (!NeedToIterateThroughPagination(response, r))
            {
                return(additionalResponses);
            }

            var paginatedRequest  = ( IRequestPagination )r;
            var paginatedResponse = ( IPaginatedResponse )response;

            if (paginatedRequest.GetOffset() != 0)
            {
                return(additionalResponses);
            }

            var numPages = paginatedRequest.GetLimit() / paginatedResponse.GetCount() + 1;

            for (int pageNum = 1; pageNum < numPages; pageNum++)
            {
                paginatedRequest.SetOffset(pageNum * 10);
                additionalResponses.Add(await GetResponseAsync <T>(r));
            }

            return(additionalResponses);
        }
Exemple #2
0
        private static bool NeedToIterateThroughPagination <T>(T response, LightspeedRequest r)
        {
            var paginatedResponse     = response as IPaginatedResponse;
            var requestWithPagination = r as IRequestPagination;

            return(paginatedResponse != null && requestWithPagination != null &&
                   paginatedResponse.GetCount() > requestWithPagination.GetLimit());
        }
Exemple #3
0
        public async Task <T> GetResponseAsync <T>(LightspeedRequest request)
        {
            var webRequest = this.CreateHttpWebRequest(_config.Endpoint + request.GetUri());

            var body = request.GetBody();

            if (body != null)
            {
                webRequest.Method        = "PUT";
                webRequest.ContentLength = body.Length;
                Stream dataStream = webRequest.GetRequestStream();
                dataStream.Write(body, 0, body.Length);
                dataStream.Close();

                webRequest.ContentType = "text/xml";
            }

            var response = await webRequest.GetResponseAsync();

            var stream = response.GetResponseStream();

            var deserializer =
                new XmlSerializer(typeof(T));

            var result = ( T )deserializer.Deserialize(stream);

            var possibleAdditionalResponses = await IterateThroughPaginationAsync <T>(request, result);

            var aggregatedResult = result as IPaginatedResponse;

            if (aggregatedResult != null)
            {
                possibleAdditionalResponses.ForEach(resp => aggregatedResult.Aggregate(( IPaginatedResponse )resp));
            }

            return(result);
        }