private void QueryCompleted( ITwitterRequest request, ITwitterResponse twitterResponse, IRateLimitUpdater rateLimitUpdater) { if (request.ExecutionContext.RateLimitTrackerMode != RateLimitTrackerMode.None) { var rateLimitHeaders = twitterResponse.Headers.Where(kvp => kvp.Key.StartsWith("x-rate-limit-")).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); rateLimitUpdater.QueryExecutedAsync(request.Query.Url, request.Query.TwitterCredentials, rateLimitHeaders); } request.ExecutionContext.Events.RaiseAfterExecutingQuery(new AfterExecutingQueryEventArgs(request.Query, twitterResponse.Content, twitterResponse.Headers)); }
private async Task HandleException( ITwitterRequest request, TwitterException exception, IRateLimitUpdater rateLimitUpdater) { var statusCode = exception.StatusCode; const int tooManyRequestStatusCode = 429; if (request.ExecutionContext.RateLimitTrackerMode != RateLimitTrackerMode.None && statusCode == tooManyRequestStatusCode) { await rateLimitUpdater.ClearRateLimitsForQueryAsync(request.Query.Url, request.Query.TwitterCredentials).ConfigureAwait(false); } request.ExecutionContext.Events.RaiseAfterExecutingQuery(new AfterExecutingQueryExceptionEventArgs(request.Query, exception)); }
public TwitterRequestHandler( ITweetinviEvents tweetinviEvents, IRateLimitAwaiter rateLimitAwaiter, IRateLimitUpdater rateLimitUpdater, ITwitterRequester twitterRequester, ICredentialsAccessor credentialsAccessor, ITweetinviSettingsAccessor tweetinviSettingsAccessor, ITwitterQueryFactory twitterQueryFactory) { _tweetinviEvents = tweetinviEvents; _rateLimitAwaiter = rateLimitAwaiter; _rateLimitUpdater = rateLimitUpdater; _twitterRequester = twitterRequester; _credentialsAccessor = credentialsAccessor; _tweetinviSettingsAccessor = tweetinviSettingsAccessor; _twitterQueryFactory = twitterQueryFactory; }
public TwitterRequestHandler( ITweetinviEvents tweetinviEvents, IRateLimitAwaiter rateLimitAwaiter, IRateLimitUpdater rateLimitUpdater, IRateLimitCacheManager rateLimitCacheManager, IWebRequestExecutor webRequestExecutor, ICredentialsAccessor credentialsAccessor, ITweetinviSettingsAccessor tweetinviSettingsAccessor, ITwitterQueryFactory twitterQueryFactory, IOAuthWebRequestGenerator oAuthWebRequestGenerator) { _tweetinviEvents = tweetinviEvents; _rateLimitAwaiter = rateLimitAwaiter; _rateLimitUpdater = rateLimitUpdater; _rateLimitCacheManager = rateLimitCacheManager; _webRequestExecutor = webRequestExecutor; _credentialsAccessor = credentialsAccessor; _tweetinviSettingsAccessor = tweetinviSettingsAccessor; _twitterQueryFactory = twitterQueryFactory; _oAuthWebRequestGenerator = oAuthWebRequestGenerator; }
private async Task QueryCompleted( ITwitterRequest request, ITwitterResponse twitterResponse, IRateLimitUpdater rateLimitUpdater) { if (request.ExecutionContext.RateLimitTrackerMode != RateLimitTrackerMode.None) { var credentials = request.Query.TwitterCredentials; var rateLimitHeaders = twitterResponse.Headers .Where(kvp => kvp.Key.StartsWith("x-rate-limit-")) .ToDictionary(kvp => kvp.Key, kvp => kvp.Value); await rateLimitUpdater.QueryExecutedAsync(request.Query.Url, credentials, rateLimitHeaders).ConfigureAwait(false); if (request.Query.QueryRateLimit == null) { var getEndPointParameters = new GetEndpointRateLimitsParameters(request.Query.Url); request.Query.QueryRateLimit = await _rateLimitCacheManager.GetQueryRateLimitAsync(getEndPointParameters, credentials).ConfigureAwait(false); } } request.ExecutionContext.Events.RaiseAfterExecutingQuery(new AfterExecutingQueryEventArgs(request.Query, twitterResponse.Content, twitterResponse.Headers)); }