示例#1
0
            // ** Rule 1 **//
            public bool ReachedMaxReuestPerTimeSpan(DateTime now)
            {
                bool IsRestricted = false;

                if (this._firstCallTime == new DateTime(0001, 1, 1))
                {
                    this._firstCallTime = now;
                }

                if (this._clientRequestsCountInTimespan == this._allowedrequestCountsPerTimespan &&
                    now - this._firstCallTime < this._allowedTimeSpan)
                {
                    IsRestricted = true;
                }
                else if (this._clientRequestsCountInTimespan == this._allowedrequestCountsPerTimespan && now - this._firstCallTime > this._allowedTimeSpan)
                {
                    IsRestricted = true;
                }
                else if (now - this._firstCallTime > this._allowedTimeSpan)
                {
                    CountCallsForClientsInTimspan[AuthToken] = 0;

                    if (FirstCallTimeForClientsInTimeSpan.ContainsKey(AuthToken))
                    {
                        FirstCallTimeForClientsInTimeSpan[AuthToken] = now;
                    }
                    else
                    {
                        FirstCallTimeForClientsInTimeSpan.Add(AuthToken, now);
                    }
                }

                return(IsRestricted);
            }
示例#2
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];
                }
            }
示例#3
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);
     }
 }