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) {
|
||||
if (isDisconnected()) {
|
||||
return Request.newBrokenRequest(AnyPointer.factory, disconnected);
|
||||
return Capability.newBrokenRequest(disconnected);
|
||||
}
|
||||
|
||||
var request = new RpcRequest(this);
|
||||
|
@ -1645,7 +1645,7 @@ final class RpcState<VatId> {
|
|||
callBuilder.setInterfaceId(interfaceId);
|
||||
callBuilder.setMethodId(methodId);
|
||||
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) {
|
||||
var redirected = redirect.newCall(
|
||||
this.callBuilder.getInterfaceId(), this.callBuilder.getMethodId());
|
||||
var replacement = new AnyPointer.Request(paramsBuilder, redirected.getHook());
|
||||
var replacement = Capability.newTypelessRequest(paramsBuilder, redirected.getHook());
|
||||
return replacement.sendInternal();
|
||||
}
|
||||
|
||||
|
|
|
@ -21,8 +21,6 @@
|
|||
|
||||
package org.capnproto;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public final class AnyPointer {
|
||||
public static final class Factory
|
||||
implements PointerFactory<Builder, Reader>,
|
||||
|
@ -189,86 +187,4 @@ public final class AnyPointer {
|
|||
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) {
|
||||
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<>() {
|
||||
@Override
|
||||
public FromPointerBuilder<T> getParamsFactory() {
|
||||
|
@ -204,7 +204,7 @@ public final class Capability {
|
|||
public Request<AnyPointer.Builder> newCall(long interfaceId, short methodId) {
|
||||
var hook = new LocalRequest(interfaceId, methodId, this);
|
||||
var root = hook.message.getRoot(AnyPointer.factory);
|
||||
return new AnyPointer.Request(root, hook);
|
||||
return newTypelessRequest(root, hook);
|
||||
}
|
||||
|
||||
@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) {
|
||||
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);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
static private ClientHook newBrokenClient(Throwable exc, boolean resolved, Object brand) {
|
||||
private static ClientHook newBrokenClient(Throwable exc, boolean resolved, Object brand) {
|
||||
return new ClientHook() {
|
||||
@Override
|
||||
public Request<AnyPointer.Builder> newCall(long interfaceId, short methodId) {
|
||||
var broken = Request.newBrokenRequest(AnyPointer.factory, exc);
|
||||
return new AnyPointer.Request(broken.getParams(), broken.getHook());
|
||||
return newBrokenRequest(exc);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -689,7 +771,7 @@ public final class Capability {
|
|||
var hook = new LocalRequest(interfaceId, methodId, this);
|
||||
this.pendingCalls.add(hook);
|
||||
var root = hook.message.getRoot(AnyPointer.factory);
|
||||
return new AnyPointer.Request(root, hook);
|
||||
return newTypelessRequest(root, hook);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -14,61 +14,4 @@ public interface Request<Params>
|
|||
default RequestBase<AnyPointer.Builder> 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