8
8
import java .util .Map ;
9
9
import java .util .concurrent .BlockingQueue ;
10
10
import java .util .concurrent .LinkedBlockingQueue ;
11
+ import java .util .concurrent .TimeUnit ;
11
12
import java .util .concurrent .atomic .AtomicBoolean ;
12
13
import java .util .stream .Stream ;
13
14
@@ -25,11 +26,11 @@ public class DiscordRequestDispatcher implements Runnable {
25
26
private final BlockingQueue <DiscordRequestBuilder > queue ;
26
27
private final String botToken ;
27
28
private final AtomicBoolean running = new AtomicBoolean (false );
29
+ private final RateLimit rateLimit = new RateLimit ();
30
+
28
31
private int numberOfRequestsSent ;
29
32
private long timeSinceLastRequest ;
30
33
31
- private RateLimit rateLimit = new RateLimit ();
32
-
33
34
public DiscordRequestDispatcher (String botToken ) {
34
35
this .botToken = botToken ;
35
36
this .httpClient = HttpClient .newBuilder ().build ();
@@ -51,30 +52,24 @@ public void run() {
51
52
LOGGER .info ("Request dispatcher has started" );
52
53
53
54
while (running .get ()) {
54
- long currentTime = System .currentTimeMillis ();
55
- long elapsed = currentTime - timeSinceLastRequest ;
56
-
57
- if (rateLimit .getRemaining () == 0 && elapsed < rateLimit .getResetAfter ()) {
58
- try {
59
- Thread .sleep (rateLimit .getResetAfter () - elapsed );
60
- } catch (InterruptedException e ) {
61
- /* Ignore */
55
+ try {
56
+ long currentTime = System .currentTimeMillis ();
57
+ long elapsed = currentTime - timeSinceLastRequest ;
58
+
59
+ if (rateLimit .getRemaining () == 0 && elapsed < rateLimit .getResetAfter ()) {
60
+ TimeUnit .MILLISECONDS .sleep (rateLimit .getResetAfter () - elapsed );
61
+
62
62
}
63
- }
64
63
65
- if (elapsed < 1000 && numberOfRequestsSent >= 50 ) {
66
- try {
67
- Thread .sleep (1000 - elapsed );
68
- } catch (InterruptedException e ) {
69
- /* Ignore */
64
+ if (elapsed < 1000 && numberOfRequestsSent >= 50 ) {
65
+ TimeUnit .MILLISECONDS .sleep (1000 - elapsed );
66
+ numberOfRequestsSent = 0 ;
70
67
}
71
- numberOfRequestsSent = 0 ;
72
- }
73
68
74
- try {
75
69
sendRequest (queue .take ());
76
70
} catch (InterruptedException e ) {
77
- /* Ignore */
71
+ LOGGER .warn ("Request dispatcher has interrupted" );
72
+ Thread .currentThread ().interrupt ();
78
73
}
79
74
}
80
75
@@ -131,7 +126,7 @@ private void sendRequest(DiscordRequestBuilder discordRequestBuilder) {
131
126
httpClient .send (httpRequest , HttpResponse .BodyHandlers .ofString ());
132
127
133
128
HttpHeaders headers = response .headers ();
134
- headers .firstValue ("x-ratelimit-bucket" ).ifPresent (val -> rateLimit . setBucket ( val ) );
129
+ headers .firstValue ("x-ratelimit-bucket" ).ifPresent (rateLimit :: setBucket );
135
130
headers .firstValue ("x-ratelimit-limit" )
136
131
.ifPresent (val -> rateLimit .setLimit (Integer .parseInt (val )));
137
132
headers .firstValue ("x-ratelimit-remaining" )
0 commit comments