replace typeless requests with anonymous implementations
This commit is contained in:
parent
585a21259e
commit
6e5bcc62ae
4 changed files with 92 additions and 151 deletions
|
@ -1637,7 +1637,7 @@ final class RpcState<VatId> {
|
||||||
|
|
||||||
private Request<AnyPointer.Builder> newCallNoIntercept(long interfaceId, short methodId) {
|
private Request<AnyPointer.Builder> newCallNoIntercept(long interfaceId, short methodId) {
|
||||||
if (isDisconnected()) {
|
if (isDisconnected()) {
|
||||||
return Request.newBrokenRequest(AnyPointer.factory, disconnected);
|
return Capability.newBrokenRequest(disconnected);
|
||||||
}
|
}
|
||||||
|
|
||||||
var request = new RpcRequest(this);
|
var request = new RpcRequest(this);
|
||||||
|
@ -1645,7 +1645,7 @@ final class RpcState<VatId> {
|
||||||
callBuilder.setInterfaceId(interfaceId);
|
callBuilder.setInterfaceId(interfaceId);
|
||||||
callBuilder.setMethodId(methodId);
|
callBuilder.setMethodId(methodId);
|
||||||
var root = request.getRoot();
|
var root = request.getRoot();
|
||||||
return new AnyPointer.Request(root, request);
|
return Capability.newTypelessRequest(root, request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1689,7 +1689,7 @@ final class RpcState<VatId> {
|
||||||
if (redirect != null) {
|
if (redirect != null) {
|
||||||
var redirected = redirect.newCall(
|
var redirected = redirect.newCall(
|
||||||
this.callBuilder.getInterfaceId(), this.callBuilder.getMethodId());
|
this.callBuilder.getInterfaceId(), this.callBuilder.getMethodId());
|
||||||
var replacement = new AnyPointer.Request(paramsBuilder, redirected.getHook());
|
var replacement = Capability.newTypelessRequest(paramsBuilder, redirected.getHook());
|
||||||
return replacement.sendInternal();
|
return replacement.sendInternal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,6 @@
|
||||||
|
|
||||||
package org.capnproto;
|
package org.capnproto;
|
||||||
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
|
|
||||||
public final class AnyPointer {
|
public final class AnyPointer {
|
||||||
public static final class Factory
|
public static final class Factory
|
||||||
implements PointerFactory<Builder, Reader>,
|
implements PointerFactory<Builder, Reader>,
|
||||||
|
@ -189,86 +187,4 @@ public final class AnyPointer {
|
||||||
return new Pipeline(this.hook, newOps);
|
return new Pipeline(this.hook, newOps);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class Request
|
|
||||||
implements org.capnproto.Request<Builder> {
|
|
||||||
|
|
||||||
private final Builder params;
|
|
||||||
private final RequestHook requestHook;
|
|
||||||
|
|
||||||
Request(Builder params, RequestHook requestHook) {
|
|
||||||
this.params = params;
|
|
||||||
this.requestHook = requestHook;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Builder getParams() {
|
|
||||||
return this.params;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.capnproto.Request<Builder> getTypelessRequest() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.capnproto.Request<Builder> getBaseRequest() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RequestHook getHook() {
|
|
||||||
return this.requestHook;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public FromPointerBuilder<Builder> getParamsFactory() {
|
|
||||||
return AnyPointer.factory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RemotePromise<Reader> sendInternal() {
|
|
||||||
return this.requestHook.send();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final class StreamingRequest
|
|
||||||
implements org.capnproto.StreamingRequest<Builder> {
|
|
||||||
|
|
||||||
private final Builder params;
|
|
||||||
private final RequestHook requestHook;
|
|
||||||
|
|
||||||
StreamingRequest(AnyPointer.Request request) {
|
|
||||||
this(request.params, request.requestHook);
|
|
||||||
}
|
|
||||||
|
|
||||||
StreamingRequest(Builder params, RequestHook requestHook) {
|
|
||||||
this.params = params;
|
|
||||||
this.requestHook = requestHook;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Builder getParams() {
|
|
||||||
return this.params;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public org.capnproto.StreamingRequest<Builder> getTypelessRequest() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RequestHook getHook() {
|
|
||||||
return this.requestHook;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public FromPointerBuilder<Builder> getParamsFactory() {
|
|
||||||
return AnyPointer.factory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public CompletableFuture<java.lang.Void> send() {
|
|
||||||
return this.requestHook.sendStreaming();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,7 +109,7 @@ public final class Capability {
|
||||||
|
|
||||||
default <T> StreamingRequest<T> newStreamingCall(FromPointerBuilder<T> paramsFactory, long interfaceId, short methodId) {
|
default <T> StreamingRequest<T> newStreamingCall(FromPointerBuilder<T> paramsFactory, long interfaceId, short methodId) {
|
||||||
var request = this.getHook().newCall(interfaceId, methodId);
|
var request = this.getHook().newCall(interfaceId, methodId);
|
||||||
var streamingRequest = new AnyPointer.StreamingRequest(request.getParams(), request.getHook());
|
var streamingRequest = newTypelessStreamingRequest(request.getParams(), request.getHook());
|
||||||
return new StreamingRequest<>() {
|
return new StreamingRequest<>() {
|
||||||
@Override
|
@Override
|
||||||
public FromPointerBuilder<T> getParamsFactory() {
|
public FromPointerBuilder<T> getParamsFactory() {
|
||||||
|
@ -204,7 +204,7 @@ public final class Capability {
|
||||||
public Request<AnyPointer.Builder> newCall(long interfaceId, short methodId) {
|
public Request<AnyPointer.Builder> newCall(long interfaceId, short methodId) {
|
||||||
var hook = new LocalRequest(interfaceId, methodId, this);
|
var hook = new LocalRequest(interfaceId, methodId, this);
|
||||||
var root = hook.message.getRoot(AnyPointer.factory);
|
var root = hook.message.getRoot(AnyPointer.factory);
|
||||||
return new AnyPointer.Request(root, hook);
|
return newTypelessRequest(root, hook);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -556,6 +556,89 @@ public final class Capability {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Request<AnyPointer.Builder> newTypelessRequest(AnyPointer.Builder params, RequestHook requestHook) {
|
||||||
|
return new Request<>() {
|
||||||
|
@Override
|
||||||
|
public AnyPointer.Builder getParams() {
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public org.capnproto.Request<AnyPointer.Builder> getTypelessRequest() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public org.capnproto.Request<AnyPointer.Builder> getBaseRequest() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RequestHook getHook() {
|
||||||
|
return requestHook;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FromPointerBuilder<AnyPointer.Builder> getParamsFactory() {
|
||||||
|
return AnyPointer.factory;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RemotePromise<AnyPointer.Reader> sendInternal() {
|
||||||
|
return requestHook.send();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
static StreamingRequest<AnyPointer.Builder> newTypelessStreamingRequest(AnyPointer.Builder params, RequestHook requestHook) {
|
||||||
|
return new StreamingRequest<>() {
|
||||||
|
@Override
|
||||||
|
public AnyPointer.Builder getParams() {
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public org.capnproto.StreamingRequest<AnyPointer.Builder> getTypelessRequest() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RequestHook getHook() {
|
||||||
|
return requestHook;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FromPointerBuilder<AnyPointer.Builder> getParamsFactory() {
|
||||||
|
return AnyPointer.factory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CompletableFuture<java.lang.Void> send() {
|
||||||
|
return requestHook.sendStreaming();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
static Request<AnyPointer.Builder> newBrokenRequest(Throwable exc) {
|
||||||
|
|
||||||
|
var message = new MessageBuilder();
|
||||||
|
var params = message.getRoot(AnyPointer.factory);
|
||||||
|
|
||||||
|
var hook = new RequestHook() {
|
||||||
|
@Override
|
||||||
|
public RemotePromise<AnyPointer.Reader> send() {
|
||||||
|
return new RemotePromise<>(CompletableFuture.failedFuture(exc),
|
||||||
|
new AnyPointer.Pipeline(PipelineHook.newBrokenPipeline(exc)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CompletableFuture<java.lang.Void> sendStreaming() {
|
||||||
|
return CompletableFuture.failedFuture(exc);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return Capability.newTypelessRequest(params, hook);
|
||||||
|
}
|
||||||
|
|
||||||
public static ClientHook newBrokenCap(String reason) {
|
public static ClientHook newBrokenCap(String reason) {
|
||||||
return newBrokenClient(reason, false, ClientHook.BROKEN_CAPABILITY_BRAND);
|
return newBrokenClient(reason, false, ClientHook.BROKEN_CAPABILITY_BRAND);
|
||||||
}
|
}
|
||||||
|
@ -568,16 +651,15 @@ public final class Capability {
|
||||||
return newBrokenClient(RpcException.failed("Called null capability"), true, ClientHook.NULL_CAPABILITY_BRAND);
|
return newBrokenClient(RpcException.failed("Called null capability"), true, ClientHook.NULL_CAPABILITY_BRAND);
|
||||||
}
|
}
|
||||||
|
|
||||||
static private ClientHook newBrokenClient(String reason, boolean resolved, Object brand) {
|
private static ClientHook newBrokenClient(String reason, boolean resolved, Object brand) {
|
||||||
return newBrokenClient(RpcException.failed(reason), resolved, brand);
|
return newBrokenClient(RpcException.failed(reason), resolved, brand);
|
||||||
}
|
}
|
||||||
|
|
||||||
static private ClientHook newBrokenClient(Throwable exc, boolean resolved, Object brand) {
|
private static ClientHook newBrokenClient(Throwable exc, boolean resolved, Object brand) {
|
||||||
return new ClientHook() {
|
return new ClientHook() {
|
||||||
@Override
|
@Override
|
||||||
public Request<AnyPointer.Builder> newCall(long interfaceId, short methodId) {
|
public Request<AnyPointer.Builder> newCall(long interfaceId, short methodId) {
|
||||||
var broken = Request.newBrokenRequest(AnyPointer.factory, exc);
|
return newBrokenRequest(exc);
|
||||||
return new AnyPointer.Request(broken.getParams(), broken.getHook());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -689,7 +771,7 @@ public final class Capability {
|
||||||
var hook = new LocalRequest(interfaceId, methodId, this);
|
var hook = new LocalRequest(interfaceId, methodId, this);
|
||||||
this.pendingCalls.add(hook);
|
this.pendingCalls.add(hook);
|
||||||
var root = hook.message.getRoot(AnyPointer.factory);
|
var root = hook.message.getRoot(AnyPointer.factory);
|
||||||
return new AnyPointer.Request(root, hook);
|
return newTypelessRequest(root, hook);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -14,61 +14,4 @@ public interface Request<Params>
|
||||||
default RequestBase<AnyPointer.Builder> getTypelessRequest() {
|
default RequestBase<AnyPointer.Builder> getTypelessRequest() {
|
||||||
return getBaseRequest().getTypelessRequest();
|
return getBaseRequest().getTypelessRequest();
|
||||||
}
|
}
|
||||||
|
|
||||||
static <Params> Request<Params> newBrokenRequest(FromPointerBuilder<Params> paramsFactory,
|
|
||||||
Throwable exc) {
|
|
||||||
|
|
||||||
var message = new MessageBuilder();
|
|
||||||
|
|
||||||
var hook = new RequestHook() {
|
|
||||||
@Override
|
|
||||||
public RemotePromise<AnyPointer.Reader> send() {
|
|
||||||
return new RemotePromise<>(CompletableFuture.failedFuture(exc),
|
|
||||||
new AnyPointer.Pipeline(PipelineHook.newBrokenPipeline(exc)));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public CompletableFuture<java.lang.Void> sendStreaming() {
|
|
||||||
return CompletableFuture.failedFuture(exc);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return new Request<>() {
|
|
||||||
@Override
|
|
||||||
public FromPointerBuilder<Params> getParamsFactory() {
|
|
||||||
return paramsFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public RequestBase<AnyPointer.Builder> getTypelessRequest() {
|
|
||||||
return new AnyPointer.Request(message.getRoot(AnyPointer.factory), hook);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Request<Params> getBaseRequest() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
static <Params> Request<Params> fromTypeless(
|
|
||||||
FromPointerBuilder<Params> paramsFactory,
|
|
||||||
Request<AnyPointer.Builder> typeless) {
|
|
||||||
return new Request<>() {
|
|
||||||
@Override
|
|
||||||
public FromPointerBuilder<Params> getParamsFactory() {
|
|
||||||
return paramsFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Request<AnyPointer.Builder> getTypelessRequest() {
|
|
||||||
return typeless;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Request<Params> getBaseRequest() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue