From e8a118f364ac4a53176ca5218f22364d59d09c3a Mon Sep 17 00:00:00 2001 From: Vaci Koblizek Date: Thu, 5 Nov 2020 16:46:09 +0000 Subject: [PATCH] add overload for messageSizeHint --- .../src/main/java/org/capnproto/RpcState.java | 35 ++++++++----------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/runtime/src/main/java/org/capnproto/RpcState.java b/runtime/src/main/java/org/capnproto/RpcState.java index 580bdba..8310988 100644 --- a/runtime/src/main/java/org/capnproto/RpcState.java +++ b/runtime/src/main/java/org/capnproto/RpcState.java @@ -16,6 +16,10 @@ final class RpcState { return 1 + RpcProtocol.Message.factory.structSize().total(); } + private static int messageSizeHint(StructFactory factory) { + return messageSizeHint() + factory.structSize().total(); + } + private static int exceptionSizeHint(Throwable exc) { return RpcProtocol.Exception.factory.structSize().total() + exc.getMessage().length(); } @@ -47,8 +51,7 @@ final class RpcState { } if (isConnected() && !this.skipFinish) { - var sizeHint = messageSizeHint() - + RpcProtocol.Finish.factory.structSize().total(); + var sizeHint = messageSizeHint(RpcProtocol.Finish.factory); var message = connection.newOutgoingMessage(sizeHint); var builder = message.getBody().getAs(RpcProtocol.Message.factory).initFinish(); builder.setQuestionId(this.id); @@ -210,7 +213,7 @@ final class RpcState { // Send a message releasing our remote references. if (this.remoteRefCount > 0 && isConnected()) { - int sizeHint = messageSizeHint() + RpcProtocol.Release.factory.structSize().total(); + int sizeHint = messageSizeHint(RpcProtocol.Release.factory); var message = connection.newOutgoingMessage(sizeHint); var builder = message.getBody().initAs(RpcProtocol.Message.factory).initRelease(); builder.setId(importId); @@ -400,8 +403,7 @@ final class RpcState { var loop = CompletableFuture.anyOf( getMessageLoop(), promise).thenCompose(x -> promise); - int sizeHint = messageSizeHint() - + RpcProtocol.Bootstrap.factory.structSize().total(); + int sizeHint = messageSizeHint(RpcProtocol.Bootstrap.factory); var message = connection.newOutgoingMessage(sizeHint); var builder = message.getBody().initAs(RpcProtocol.Message.factory).initBootstrap(); builder.setQuestionId(question.getId()); @@ -526,8 +528,7 @@ final class RpcState { answer.active = true; var capTable = new BuilderCapabilityTable(); - int sizeHint = messageSizeHint() - + RpcProtocol.Return.factory.structSize().total() + int sizeHint = messageSizeHint(RpcProtocol.Return.factory) + RpcProtocol.Payload.factory.structSize().total(); var response = connection.newOutgoingMessage(sizeHint); @@ -799,9 +800,7 @@ final class RpcState { return null; } - int sizeHint = messageSizeHint() - + RpcProtocol.Disembargo.factory.structSize().total() - + MESSAGE_TARGET_SIZE_HINT; + int sizeHint = messageSizeHint(RpcProtocol.Disembargo.factory) + MESSAGE_TARGET_SIZE_HINT; var message = connection.newOutgoingMessage(sizeHint); var builder = message.getBody().initAs(RpcProtocol.Message.factory).initDisembargo(); var redirect = rpcTarget.writeTarget(builder.initTarget()); @@ -941,9 +940,7 @@ final class RpcState { } // send a Resolve message - int sizeHint = messageSizeHint() - + RpcProtocol.Resolve.factory.structSize().total() - + CAP_DESCRIPTOR_SIZE_HINT; + int sizeHint = messageSizeHint(RpcProtocol.Resolve.factory) + CAP_DESCRIPTOR_SIZE_HINT; var message = connection.newOutgoingMessage(sizeHint); var resolve = message.getBody().initAs(RpcProtocol.Message.factory).initResolve(); resolve.setPromiseId(exportId); @@ -956,9 +953,7 @@ final class RpcState { if (exc == null) { return; } - int sizeHint = messageSizeHint() - + RpcProtocol.Resolve.factory.structSize().total() - + exceptionSizeHint(exc); + int sizeHint = messageSizeHint(RpcProtocol.Resolve.factory) + exceptionSizeHint(exc); var message = connection.newOutgoingMessage(sizeHint); var resolve = message.getBody().initAs(RpcProtocol.Message.factory).initResolve(); resolve.setPromiseId(exportId); @@ -1306,9 +1301,8 @@ final class RpcState { this.response = new LocallyRedirectedRpcResponse(); } else { - sizeHint += messageSizeHint() - + RpcProtocol.Payload.factory.structSize().total() - + RpcProtocol.Return.factory.structSize().total(); + sizeHint += messageSizeHint(RpcProtocol.Return.factory) + + RpcProtocol.Payload.factory.structSize().total(); var message = connection.newOutgoingMessage(sizeHint); this.returnMessage = message.getBody().initAs(RpcProtocol.Message.factory).initReturn(); this.response = new RpcServerResponseImpl(message, returnMessage.getResults()); @@ -1812,8 +1806,7 @@ final class RpcState { // TODO Flow control if (resolutionType == ResolutionType.REFLECTED && receivedCall && !isDisconnected()) { - int sizeHint = messageSizeHint() - + RpcProtocol.Disembargo.factory.structSize().total(); + int sizeHint = messageSizeHint(RpcProtocol.Disembargo.factory); var message = connection.newOutgoingMessage(sizeHint); var disembargo = message.getBody().initAs(RpcProtocol.Message.factory).initDisembargo(); var redirect = RpcState.this.writeTarget(cap, disembargo.initTarget());