예제 #1
0
            // 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];
                }
            }
예제 #2
0
 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);
     }
 }