diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestBuilder.java b/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestBuilder.java index b17f82cd..6b391ec8 100644 --- a/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestBuilder.java +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestBuilder.java @@ -5,6 +5,7 @@ import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; +import java.util.stream.Collectors; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -130,4 +131,41 @@ protected void setSuccessResult(DiscordResponse result) { protected void setFailureError(Throwable ex) { future.setException(ex); } + + @Override + public String toString() { + String headersString = + headers.entrySet().stream() + .map(entry -> entry.getKey() + "=" + entry.getValue()) + .collect(Collectors.joining(", ")); + + String queryParamsString = + queryParameters.entrySet().stream() + .map(entry -> entry.getKey() + "=" + entry.getValue()) + .collect(Collectors.joining(", ")); + + String bodyString; + try { + bodyString = OBJECT_MAPPER.writeValueAsString(body); + } catch (JsonProcessingException e) { + bodyString = "Error converting body to string: " + e.getMessage(); + } + + return this.getClass().getName() + + "{" + + "method=" + + method + + ", path='" + + path + + '\'' + + ", headers={" + + headersString + + '}' + + ", queryParameters={" + + queryParamsString + + '}' + + ", body=" + + bodyString + + '}'; + } } diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestDispatcher.java b/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestDispatcher.java index 32dbe0ef..86bd3370 100644 --- a/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestDispatcher.java +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestDispatcher.java @@ -1,5 +1,6 @@ package com.javadiscord.jdi.internal.api; +import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; @@ -23,7 +24,7 @@ public class DiscordRequestDispatcher implements Runnable { private final HttpClient httpClient; private final BlockingQueue queue; private final String botToken; - private AtomicBoolean running = new AtomicBoolean(false); + private final AtomicBoolean running = new AtomicBoolean(false); private int numberOfRequestsSent; private long timeSinceLastRequest; @@ -48,20 +49,14 @@ public void run() { while (running.get()) { long currentTime = System.currentTimeMillis(); long elapsed = currentTime - timeSinceLastRequest; - - if (elapsed < 1000 && numberOfRequestsSent >= 50) { - try { - Thread.sleep(1000 - elapsed); - } catch (InterruptedException e) { - /* Ignore */ - } - numberOfRequestsSent = 0; - } - try { + if (elapsed < 1000 && numberOfRequestsSent >= 50) { + Thread.sleep(1000L - elapsed); + numberOfRequestsSent = 0; + } sendRequest(queue.take()); } catch (InterruptedException e) { - /* Ignore */ + Thread.currentThread().interrupt(); } } } @@ -71,6 +66,7 @@ public void stop() { } private void sendRequest(DiscordRequestBuilder discordRequestBuilder) { + LOGGER.debug("Sending request {}", discordRequestBuilder); try { HttpRequest.Builder requestBuilder = HttpRequest.newBuilder() @@ -126,7 +122,11 @@ private void sendRequest(DiscordRequestBuilder discordRequestBuilder) { ) ); - } catch (Exception e) { + } catch (InterruptedException e) { + LOGGER.error("Thread was interrupted", e); + discordRequestBuilder.setFailureError(e); + Thread.currentThread().interrupt(); + } catch (IOException e) { LOGGER.error( "Failed to send request to {}{}", BASE_URL, discordRequestBuilder.getPath(), e );