public static IAsyncResult BeginSearch <T>(GoogleSearchRequest request, int resultCount, AsyncCallback callback, object state) { var searchAsyncResult = new SearchAsyncResult <T>(state); RunSearch(searchAsyncResult, request, 0, resultCount, callback); return(searchAsyncResult); }
internal List <TResult> Search <T, TResult>(GoogleSearchRequest request, int resultCount) where T : TResult { this.SetValueTo(request); var list = SearchUtility.Search <T>(request, resultCount); return(list.ConvertAll(item => (TResult)item)); }
private static void RunSearch <T>(SearchAsyncResult <T> searchAsyncResult, GoogleSearchRequest request, int start, int restCount, AsyncCallback callback) { if (restCount > 0) { var resultSize = restCount > 4 ? ResultSize.Large : ResultSize.Small; BeginGetResponseData( request, start, resultSize, ar => { try { ISearchData <T> searchData; try { searchData = EndGetResponseData <T>(ar); } catch (GoogleServiceException ex) { if (ex.ResponseStatus == ResponseStatusConstant.OutOfRangeStatus) { FinishSearch(searchAsyncResult, callback); return; } throw; } var count = Math.Min(searchData.Results.Length, restCount); if (count == 0) { FinishSearch(searchAsyncResult, callback); } else { searchAsyncResult.Result.AddRange(searchData.Results.Take(count)); RunSearch(searchAsyncResult, request, start + count, restCount - count, callback); } } catch (Exception ex) { searchAsyncResult.Exception = ex; FinishSearch(searchAsyncResult, callback); } }, null); } else { FinishSearch(searchAsyncResult, callback); } }
public static List <T> Search <T>(GoogleSearchRequest request, int resultCount) { var start = 0; var results = new List <T>(); var restCount = resultCount; while (restCount > 0) { ISearchData <T> searchData; try { if (restCount > 4) { searchData = GetResponseData <T>(request, start, ResultSize.Large); } else { searchData = GetResponseData <T>(request, start, ResultSize.Small); } } catch (GoogleServiceException ex) { if (ex.ResponseStatus == ResponseStatusConstant.OutOfRangeStatus) { return(results); } throw; } var count = searchData.Results.Length; if (count == 0) { break; } if (count <= restCount) { results.AddRange(searchData.Results); } else { count = restCount; for (var i = 0; i < count; ++i) { results.Add(searchData.Results[i]); } } start += count; restCount -= count; } return(results); }
private static ISearchData <T> GetResponseData <T>(GoogleSearchRequest request, int start, string resultSize) { ResetRequest(request, start, resultSize); return(RequestUtility.GetResponseData <SearchData <T> >(request)); }
private static void ResetRequest(GoogleSearchRequest request, int start, string resultSize) { request.Reset(); request.Start = start; request.ResultSize = resultSize; }
private static IAsyncResult BeginGetResponseData(GoogleSearchRequest request, int start, string resultSize, AsyncCallback callback, object state) { ResetRequest(request, start, resultSize); return(RequestUtility.BeginGetResponseData(request, callback, state)); }
internal IAsyncResult BeginSearch <T>(GoogleSearchRequest request, int resultCount, AsyncCallback callback, object state) { this.SetValueTo(request); return(SearchUtility.BeginSearch <T>(request, resultCount, callback, state)); }