public async Task <ITwitterResponse> ExecuteQueryAsync(ITwitterRequest request) { var rateLimitUpdater = _rateLimitUpdaterFactory.Create(_rateLimitCacheManager); await PrepareTwitterRequestAsync(request).ConfigureAwait(false); var beforeQueryExecuteEventArgs = new BeforeExecutingRequestEventArgs(request.Query); request.ExecutionContext.Events.RaiseBeforeWaitingForQueryRateLimits(beforeQueryExecuteEventArgs); if (beforeQueryExecuteEventArgs.Cancel) { throw new OperationCanceledException("Operation was cancelled intentionally."); } await WaitBeforeExecutingQueryAsync(request).ConfigureAwait(false); request.ExecutionContext.Events.RaiseBeforeExecutingQuery(beforeQueryExecuteEventArgs); try { ITwitterResponse twitterResponse; if (!(request.Query is IMultipartTwitterQuery)) { twitterResponse = await _webRequestExecutor.ExecuteQueryAsync(request, request.TwitterClientHandler).ConfigureAwait(false); } else { twitterResponse = await _webRequestExecutor.ExecuteMultipartQueryAsync(request).ConfigureAwait(false); } QueryCompleted(request, twitterResponse, rateLimitUpdater); return(twitterResponse); } catch (TwitterException ex) { HandleException(request, ex, rateLimitUpdater); throw; } }
private HttpClient GetHttpClient(ITwitterRequest request) { if (request.Query == null) { SetStreamState(StreamState.Stop, null); return(null); } request.Query.Timeout = Timeout.InfiniteTimeSpan; var queryBeforeExecuteEventArgs = new BeforeExecutingRequestEventArgs(request.Query); _tweetinviEvents.RaiseBeforeWaitingForQueryRateLimits(queryBeforeExecuteEventArgs); if (queryBeforeExecuteEventArgs.Cancel) { SetStreamState(StreamState.Stop, null); return(null); } return(_httpClientWebHelper.GetHttpClient(request.Query)); }
private async Task WaitBeforeExecutingQueryAsync(ITwitterRequest request) { var twitterQuery = request.Query; if (twitterQuery.DateWhenCredentialsWillHaveTheRequiredRateLimits == null) { return; } if (request.ExecutionContext.RateLimitTrackerMode == RateLimitTrackerMode.TrackAndAwait) { var beforeQueryExecuteEventArgs = new BeforeExecutingRequestEventArgs(request.Query); request.ExecutionContext.Events.RaiseBeforeWaitingForQueryRateLimits(beforeQueryExecuteEventArgs); if (beforeQueryExecuteEventArgs.Cancel) { throw new OperationCanceledException("Operation was cancelled intentionally."); } await _rateLimitAwaiter.WaitForCredentialsRateLimitAsync(request).ConfigureAwait(false); } }
protected void RaiseBeforeExecutingQuery(object sender, BeforeExecutingRequestEventArgs beforeExecutingRequestExecutedEventArgs) { BeforeExecutingRequest?.Invoke(sender, beforeExecutingRequestExecutedEventArgs); }
public void RaiseBeforeWaitingForQueryRateLimits(BeforeExecutingRequestEventArgs beforeExecutingRequestAfterExecuteEventArgs) { this.Raise(BeforeWaitingForRequestRateLimits, beforeExecutingRequestAfterExecuteEventArgs); }
protected void RaiseBeforeWaitingForQueryRateLimits(object sender, BeforeExecutingRequestEventArgs beforeExecutingRequestAfterExecuteEventArgs) { BeforeWaitingForRequestRateLimits?.Invoke(sender, beforeExecutingRequestAfterExecuteEventArgs); }
public void RaiseBeforeExecutingQuery(BeforeExecutingRequestEventArgs beforeExecutingRequestExecutedEventArgs) { this.Raise(BeforeExecutingRequest, beforeExecutingRequestExecutedEventArgs); }
private void TweetinviEventsOnBeforeWaitingForRequestRateLimits(object sender, BeforeExecutingRequestEventArgs args) { _logger.WriteLine($"{args.TwitterQuery.HttpMethod.ToString()} {args.Url}"); }