blob: 6868dc629fe31c3fd288c6f81f8035aecdcb9040 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package io.v.v23.rpc;
import io.v.v23.context.VContext;
import io.v.v23.vdl.VdlValue;
import io.v.v23.vdlroot.signature.Interface;
import io.v.v23.vdlroot.signature.Method;
import io.v.v23.verror.VException;
import java.lang.reflect.Type;
/**
* Interface used by the server for invoking methods on named objects. Typically
* {@link ReflectInvoker} is used, which makes all public methods on the given
* object invokable.
*/
public interface Invoker extends Globber {
/**
* Invokes the given method with the provided arguments. Returns the results of the invocation.
*
* @param ctx context of the call
* @param call call
* @param method invoked method
* @param args method arguments
* @return results of the invocation
* @throws VException if there was an error invoking the method
*/
Object[] invoke(VContext ctx, StreamServerCall call, String method, Object[] args)
throws VException;
/**
* Returns the signatures of the interfaces that the underlying object implements.
*
* @param ctx context of the call
* @param call call
* @throws VException if the signatures couldn't be generated
*/
Interface[] getSignature(VContext ctx, ServerCall call) throws VException;
/**
* Returns the signature of the given method.
*
* @param ctx context of the call
* @param call call
* @param method method name
* @throws VException if the method signature couldn't be generated
*/
Method getMethodSignature(VContext ctx, ServerCall call, String method) throws VException;
/**
* Returns the argument types for the given method.
*
* @param method method name
* @throws VException if the argument types couldn't be retrieved
*/
Type[] getArgumentTypes(String method) throws VException;
/**
* Returns the result types for the given method.
*
* @param method method name
* @throws VException if the result types couldn't be retrieved
*/
Type[] getResultTypes(String method) throws VException;
/**
* Returns all the tags associated with the provided method or an empty array if no tags have
* been associated with it.
*
* @param method method name
* @throws VException if the method doesn't exist
*/
VdlValue[] getMethodTags(String method) throws VException;
}