// Initializing the parameters in the constructor public RateLimiter(string authToken, TimeSpan timeSpanPastSinceLastCall, TimeSpan allowedTimeSpan, int AllowedrequestCountsPerTimespan) { this._authToken = authToken; // parameters for X request per timespan this._allowedrequestCountsPerTimespan = AllowedrequestCountsPerTimespan; if (CountCallsForClientsInTimspan.ContainsKey(AuthToken)) { this._clientRequestsCountInTimespan = CountCallsForClientsInTimspan[AuthToken]; } if (FirstCallTimeForClientsInTimeSpan.ContainsKey(AuthToken)) { this._firstCallTime = FirstCallTimeForClientsInTimeSpan[AuthToken]; } this._allowedTimeSpan = allowedTimeSpan; // parameters for a certain timespan passed since the last call; this._timeSpanPastSinceLastCall = timeSpanPastSinceLastCall; if (LastCallTimeForClients.ContainsKey(AuthToken)) { this._lastCallTime = LastCallTimeForClients[AuthToken]; } }
public void AddRequest(DateTime now, int count) { if (CountCallsForClientsInTimspan.ContainsKey(AuthToken)) { CountCallsForClientsInTimspan[AuthToken] = count + 1; LastCallTimeForClients[AuthToken] = now; } else { CountCallsForClientsInTimspan.Add(AuthToken, 1); FirstCallTimeForClientsInTimeSpan.Add(AuthToken, now); LastCallTimeForClients.Add(AuthToken, now); } }