Skip to content

Commit 0b9f5cc

Browse files
committed
Fix burst rate limit for edge case on requests
Add Get properties for burst information Add _lastRequest datetime for burst requests too
1 parent af2008e commit 0b9f5cc

File tree

1 file changed

+32
-2
lines changed

1 file changed

+32
-2
lines changed

RedditSharp/WebAgent.cs

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,28 @@ public enum RateLimitMode
7373
private static DateTime _lastRequest;
7474
private static DateTime _burstStart;
7575
private static int _requestsThisBurst;
76+
/// <summary>
77+
/// UTC DateTime of last request made to Reddit API
78+
/// </summary>
79+
public DateTime LastRequest
80+
{
81+
get { return _lastRequest; }
82+
}
83+
/// <summary>
84+
/// UTC DateTime of when the last burst started
85+
/// </summary>
86+
public DateTime BurstStart
87+
{
88+
get { return _burstStart; }
89+
}
90+
/// <summary>
91+
/// Number of requests made during the current burst
92+
/// </summary>
93+
public int RequestsThisBurst
94+
{
95+
get { return _requestsThisBurst; }
96+
}
97+
7698

7799
public JToken CreateAndExecuteRequest(string url)
78100
{
@@ -157,27 +179,35 @@ private static void EnforceRateLimit()
157179
_lastRequest = DateTime.UtcNow;
158180
break;
159181
case RateLimitMode.SmallBurst:
160-
if (_requestsThisBurst == 0)//this is first request
182+
if (_requestsThisBurst == 0 || (DateTime.UtcNow - _burstStart).TotalSeconds >= 10) //this is first request OR the burst expired
183+
{
161184
_burstStart = DateTime.UtcNow;
185+
_requestsThisBurst = 0;
186+
}
162187
if (_requestsThisBurst >= 5) //limit has been reached
163188
{
164189
while ((DateTime.UtcNow - _burstStart).TotalSeconds < 10)
165190
Thread.Sleep(250);
166191
_burstStart = DateTime.UtcNow;
167192
_requestsThisBurst = 0;
168193
}
194+
_lastRequest = DateTime.UtcNow;
169195
_requestsThisBurst++;
170196
break;
171197
case RateLimitMode.Burst:
172-
if (_requestsThisBurst == 0)//this is first request
198+
if (_requestsThisBurst == 0 || (DateTime.UtcNow - _burstStart).TotalSeconds >= 60) //this is first request OR the burst expired
199+
{
173200
_burstStart = DateTime.UtcNow;
201+
_requestsThisBurst = 0;
202+
}
174203
if (_requestsThisBurst >= 30) //limit has been reached
175204
{
176205
while ((DateTime.UtcNow - _burstStart).TotalSeconds < 60)
177206
Thread.Sleep(250);
178207
_burstStart = DateTime.UtcNow;
179208
_requestsThisBurst = 0;
180209
}
210+
_lastRequest = DateTime.UtcNow;
181211
_requestsThisBurst++;
182212
break;
183213
}

0 commit comments

Comments
 (0)