From 37c93cc5d2d30fc193f88c0ffa300b5820a0438f Mon Sep 17 00:00:00 2001 From: Vaci Koblizek Date: Mon, 28 Sep 2020 22:16:38 +0100 Subject: [PATCH] implement request send --- .../src/main/java/org/capnproto/QueuedClient.java | 2 +- runtime/src/main/java/org/capnproto/Request.java | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) 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); } }