From f444afd465115f0e496016d4c39782824e47fb14 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Sat, 2 Oct 2021 23:33:00 +0200 Subject: [PATCH] Pass timeout --- .../tdlibsession/td/middle/ExecuteObject.java | 15 +++++++++++++-- .../td/middle/TdExecuteObjectMessageCodec.java | 10 +++++++--- .../client/AsyncTdMiddleEventBusClient.java | 2 +- .../server/AsyncTdMiddleEventBusServer.java | 3 ++- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/main/java/it/tdlight/tdlibsession/td/middle/ExecuteObject.java b/src/main/java/it/tdlight/tdlibsession/td/middle/ExecuteObject.java index 3b62466..89e71bb 100644 --- a/src/main/java/it/tdlight/tdlibsession/td/middle/ExecuteObject.java +++ b/src/main/java/it/tdlight/tdlibsession/td/middle/ExecuteObject.java @@ -3,6 +3,7 @@ package it.tdlight.tdlibsession.td.middle; import io.vertx.core.buffer.Buffer; import it.tdlight.jni.TdApi; import it.tdlight.jni.TdApi.Function; +import java.time.Duration; import java.util.Objects; import java.util.StringJoiner; @@ -12,13 +13,16 @@ public class ExecuteObject { private boolean executeDirectly; private TdApi.Function request; + private Duration timeout; private int pos; private Buffer buffer; - public ExecuteObject(boolean executeDirectly, Function request) { + public ExecuteObject(boolean executeDirectly, Function request, Duration timeout) { + if (request == null) throw new NullPointerException(); + this.executeDirectly = executeDirectly; this.request = request; - if (request == null) throw new NullPointerException(); + this.timeout = timeout; } public ExecuteObject(int pos, Buffer buffer) { @@ -32,6 +36,7 @@ public class ExecuteObject { this.executeDirectly = data.executeDirectly; this.request = data.request; this.buffer = null; + this.timeout = data.timeout; } } @@ -45,6 +50,11 @@ public class ExecuteObject { return request; } + public Duration getTimeout() { + tryDecode(); + return timeout; + } + @Override public boolean equals(Object o) { tryDecode(); @@ -76,6 +86,7 @@ public class ExecuteObject { return new StringJoiner(", ", ExecuteObject.class.getSimpleName() + "[", "]") .add("executeDirectly=" + executeDirectly) .add("request=" + request) + .add("timeout=" + timeout) .toString(); } } diff --git a/src/main/java/it/tdlight/tdlibsession/td/middle/TdExecuteObjectMessageCodec.java b/src/main/java/it/tdlight/tdlibsession/td/middle/TdExecuteObjectMessageCodec.java index 9eefe01..e27145d 100644 --- a/src/main/java/it/tdlight/tdlibsession/td/middle/TdExecuteObjectMessageCodec.java +++ b/src/main/java/it/tdlight/tdlibsession/td/middle/TdExecuteObjectMessageCodec.java @@ -5,6 +5,7 @@ import io.vertx.core.eventbus.MessageCodec; import it.tdlight.jni.TdApi; import it.tdlight.jni.TdApi.Function; import it.tdlight.utils.BufferUtils; +import java.time.Duration; public class TdExecuteObjectMessageCodec implements MessageCodec { @@ -17,14 +18,17 @@ public class TdExecuteObjectMessageCodec implements MessageCodec { os.writeBoolean(t.isExecuteDirectly()); t.getRequest().serialize(os); + os.writeLong(t.getTimeout().toMillis()); }); } @Override public ExecuteObject decodeFromWire(int pos, Buffer buffer) { - return BufferUtils.decode(pos, buffer, is -> { - return new ExecuteObject(is.readBoolean(), (Function) TdApi.Deserializer.deserialize(is)); - }); + return BufferUtils.decode(pos, buffer, is -> new ExecuteObject( + is.readBoolean(), + (Function) TdApi.Deserializer.deserialize(is), + Duration.ofMillis(is.readLong()) + )); } @Override diff --git a/src/main/java/it/tdlight/tdlibsession/td/middle/client/AsyncTdMiddleEventBusClient.java b/src/main/java/it/tdlight/tdlibsession/td/middle/client/AsyncTdMiddleEventBusClient.java index 7d6d77c..47898e3 100644 --- a/src/main/java/it/tdlight/tdlibsession/td/middle/client/AsyncTdMiddleEventBusClient.java +++ b/src/main/java/it/tdlight/tdlibsession/td/middle/client/AsyncTdMiddleEventBusClient.java @@ -344,7 +344,7 @@ public class AsyncTdMiddleEventBusClient implements AsyncTdMiddle { @Override public Mono> execute(Function request, Duration timeout, boolean executeSync) { - var req = new ExecuteObject(executeSync, request); + var req = new ExecuteObject(executeSync, request, timeout); var deliveryOptions = new DeliveryOptions(this.deliveryOptions).setSendTimeout(timeout.toMillis()); var crashMono = crash.asMono() diff --git a/src/main/java/it/tdlight/tdlibsession/td/middle/server/AsyncTdMiddleEventBusServer.java b/src/main/java/it/tdlight/tdlibsession/td/middle/server/AsyncTdMiddleEventBusServer.java index cae652e..04ff8c5 100644 --- a/src/main/java/it/tdlight/tdlibsession/td/middle/server/AsyncTdMiddleEventBusServer.java +++ b/src/main/java/it/tdlight/tdlibsession/td/middle/server/AsyncTdMiddleEventBusServer.java @@ -145,11 +145,12 @@ public class AsyncTdMiddleEventBusServer extends AbstractVerticle { .flatMap(msg -> { var body = msg.body(); var request = overrideRequest(body.getRequest(), botId); + var timeout = body.getTimeout(); if (logger.isTraceEnabled()) { logger.trace("Received execute request {}", request); } return td - .execute(request, Duration.ofSeconds(60 + 30), body.isExecuteDirectly()) + .execute(request, timeout, body.isExecuteDirectly()) .single() .doOnSuccess(s -> logger.trace("Executed successfully. Request was {}", request)) .onErrorResume(ex -> Mono.fromRunnable(() -> msg.fail(500, ex.getLocalizedMessage())))