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 super T> success) {
@@ -46,6 +46,13 @@ default void queue(Consumer super T> 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 super T> success, Consumer super RequestError> fa
public T complete() {
return submit().join();
}
+
+ @Override
+ public T complete(long timeout, TimeUnit timeUnit) throws ExecutionException, InterruptedException, TimeoutException {
+ return submit().get(timeout, timeUnit);
+ }
+
}