diff --git a/runtime/src/main/java/org/capnproto/QueuedClient.java b/runtime/src/main/java/org/capnproto/QueuedClient.java index 886de67..9c53bb5 100644 --- a/runtime/src/main/java/org/capnproto/QueuedClient.java +++ b/runtime/src/main/java/org/capnproto/QueuedClient.java @@ -27,7 +27,7 @@ class QueuedClient implements ClientHook { public Request newCall(long interfaceId, short methodId) { var hook = new Capability.LocalRequest(interfaceId, methodId, this); var root = hook.message.getRoot(AnyPointer.factory); - return new Request<>(root, hook); + return new Request<>(root, AnyPointer.factory, hook); } @Override diff --git a/runtime/src/main/java/org/capnproto/Request.java b/runtime/src/main/java/org/capnproto/Request.java index bedc248..9a00f95 100644 --- a/runtime/src/main/java/org/capnproto/Request.java +++ b/runtime/src/main/java/org/capnproto/Request.java @@ -5,10 +5,12 @@ import java.util.concurrent.CompletableFuture; public class Request { private final AnyPointer.Builder params; - private final RequestHook hook; + private final FromPointerReader results; + private RequestHook hook; - Request(AnyPointer.Builder params, RequestHook hook) { + Request(AnyPointer.Builder params, FromPointerReader results, RequestHook hook) { this.params = params; + this.results = results; this.hook = hook; } @@ -17,7 +19,11 @@ public class Request { } CompletableFuture send() { - return null; + var typelessPromise = hook.send(); + hook = null; // prevent reuse + return typelessPromise.getResponse().thenApply(response -> { + return response.getAs(results); + }); } static Request newBrokenRequest(Throwable exc) { @@ -36,7 +42,7 @@ public class Request { }; var root = message.getRoot(AnyPointer.factory); - return new Request(root, hook); + return new Request(root, null, hook); } }