package edu.brown.protorpc;
import com.google.protobuf.ByteString;
import com.google.protobuf.Descriptors.MethodDescriptor;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.Message;
import com.google.protobuf.RpcCallback;
import com.google.protobuf.RpcController;
import com.google.protobuf.Service;
public final class ProtoMethodInvoker {
private final Service service;
private final MethodDescriptor method;
private final Message requestPrototype;
public ProtoMethodInvoker(Service service, MethodDescriptor method) {
this.service = service;
this.method = method;
requestPrototype = service.getRequestPrototype(method);
}
public void invoke(RpcController controller, ByteString request,
RpcCallback<Message> callback) throws InvalidProtocolBufferException {
Message.Builder builder = requestPrototype.newBuilderForType();
builder.mergeFrom(request);
service.callMethod(method, controller, builder.build(), callback);
}
}