@@ -73,6 +73,28 @@ public enum RateLimitMode
73
73
private static DateTime _lastRequest ;
74
74
private static DateTime _burstStart ;
75
75
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
+
76
98
77
99
public JToken CreateAndExecuteRequest ( string url )
78
100
{
@@ -157,27 +179,35 @@ private static void EnforceRateLimit()
157
179
_lastRequest = DateTime . UtcNow ;
158
180
break ;
159
181
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
+ {
161
184
_burstStart = DateTime . UtcNow ;
185
+ _requestsThisBurst = 0 ;
186
+ }
162
187
if ( _requestsThisBurst >= 5 ) //limit has been reached
163
188
{
164
189
while ( ( DateTime . UtcNow - _burstStart ) . TotalSeconds < 10 )
165
190
Thread . Sleep ( 250 ) ;
166
191
_burstStart = DateTime . UtcNow ;
167
192
_requestsThisBurst = 0 ;
168
193
}
194
+ _lastRequest = DateTime . UtcNow ;
169
195
_requestsThisBurst ++ ;
170
196
break ;
171
197
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
+ {
173
200
_burstStart = DateTime . UtcNow ;
201
+ _requestsThisBurst = 0 ;
202
+ }
174
203
if ( _requestsThisBurst >= 30 ) //limit has been reached
175
204
{
176
205
while ( ( DateTime . UtcNow - _burstStart ) . TotalSeconds < 60 )
177
206
Thread . Sleep ( 250 ) ;
178
207
_burstStart = DateTime . UtcNow ;
179
208
_requestsThisBurst = 0 ;
180
209
}
210
+ _lastRequest = DateTime . UtcNow ;
181
211
_requestsThisBurst ++ ;
182
212
break ;
183
213
}
0 commit comments