diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml index bfffe18..65ddbaa 100644 --- a/dependency-reduced-pom.xml +++ b/dependency-reduced-pom.xml @@ -3,7 +3,7 @@ 4.0.0 io.mymetaverse.sdk java-sdk - 2.5.0 + 2.5.2 package install ${project.name}-${project.version} diff --git a/pom.xml b/pom.xml index 204f72a..199b4c2 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,8 @@ io.mymetaverse.sdk java-sdk - 2.5.1 + 2.5.2 + 8 diff --git a/src/main/java/io/mymetavese/metaapi/api/RestAction.java b/src/main/java/io/mymetavese/metaapi/api/RestAction.java index 6580a03..77acd5c 100644 --- a/src/main/java/io/mymetavese/metaapi/api/RestAction.java +++ b/src/main/java/io/mymetavese/metaapi/api/RestAction.java @@ -3,7 +3,9 @@ import io.mymetavese.metaapi.MetaAPIImpl; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import java.util.function.Consumer; public interface RestAction { @@ -23,7 +25,6 @@ public interface RestAction { /** * Submits a request for execution in asynchronous logic. * - * * @param success The success callback from the request. * @param failure The callback error from the request. */ @@ -32,7 +33,6 @@ public interface RestAction { /** * Submits a request for execution in asynchronous logic. * - * * @param success The success callback from the request. */ default void queue(Consumer success) { @@ -46,6 +46,13 @@ default void queue(Consumer success) { */ T complete(); + /** + * Submits a Request in synchronous logic with a Timeout + * + * @return The response of the Request. + */ + T complete(long timeout, TimeUnit timeUnit) throws ExecutionException, InterruptedException, TimeoutException; + /** * Submits a request for execution after some time delay. * @param time The time diff --git a/src/main/java/io/mymetavese/metaapi/requests/RequestGenerator.java b/src/main/java/io/mymetavese/metaapi/requests/RequestGenerator.java index df4b8d6..f12ae14 100644 --- a/src/main/java/io/mymetavese/metaapi/requests/RequestGenerator.java +++ b/src/main/java/io/mymetavese/metaapi/requests/RequestGenerator.java @@ -8,7 +8,6 @@ import okhttp3.internal.http.HttpMethod; import java.io.IOException; -import java.util.Objects; public class RequestGenerator { @@ -29,6 +28,7 @@ public void asyncRequest(Request request) { } public void request(Request request) { + String route = request.getCompiledRoute(); okhttp3.Request.Builder builder = new okhttp3.Request.Builder(); @@ -52,28 +52,29 @@ else if(bodyObject != null) if (request.getHeaders() != null && !request.getHeaders().isEmpty()) request.getHeaders().forEach(builder::addHeader); - // Maybe should add attempts here. - try(Response response = httpClient.newCall(builder.build()).execute()) { + try (Response response = httpClient.newCall(builder.build()).execute()) { + if (response.code() >= 500) { - throw new IOException("Internal server error: " + Objects.requireNonNull(response.body()).string()); + String responseBodyString = response.peekBody(Long.MAX_VALUE).string(); + request.handleResponse(response); + throw new IOException("Internal server error: " + responseBodyString); } - if(response.code() == 401 && request.getAttempts() < 2) { + // Try to Re-authenticate if the token is invalid and the re-authentication has not been attempted for more + // than 2 times. + if (response.code() == 401 && request.getAttempts() < 2) { + request.addAttempt(); api.getTokenHandler().authenticate(); this.request(request); - return; + + } else { + request.handleResponse(response); } - request.handleResponse(response); } catch (IOException ex) { ex.printStackTrace(); - - if(request.getAttempts() < 2) { - request.addAttempt(); - this.request(request); - } } } diff --git a/src/main/java/io/mymetavese/metaapi/requests/RestActionImpl.java b/src/main/java/io/mymetavese/metaapi/requests/RestActionImpl.java index e64ea4c..544ceee 100644 --- a/src/main/java/io/mymetavese/metaapi/requests/RestActionImpl.java +++ b/src/main/java/io/mymetavese/metaapi/requests/RestActionImpl.java @@ -15,6 +15,9 @@ import java.util.Map; import java.util.Objects; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import java.util.function.Consumer; public abstract class RestActionImpl extends Transformable implements RestAction { @@ -104,5 +107,11 @@ public void queue(Consumer success, Consumer fa public T complete() { return submit().join(); } + + @Override + public T complete(long timeout, TimeUnit timeUnit) throws ExecutionException, InterruptedException, TimeoutException { + return submit().get(timeout, timeUnit); + } + }