package li.cil.oc.api.network; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Context; /** * This interface can be used with an {@link li.cil.oc.api.network.Environment} * and is intended to be used for environments wrapping a ComputerCraft * peripheral. It could be used for other purposes as well, though. It allows * providing method names in addition to those defined via the * {@link li.cil.oc.api.machine.Callback} annotation, and invoking said methods. */ public interface ManagedPeripheral { /** * Get the list of methods provided by this environment, in * <em>addition</em> to methods marked as callbacks. * <p/> * Returning <tt>null</tt> has the same meaning as returning an empty array, * that being that there are no methods - in which case you don't need this * interface! * * @return the list of methods provided by the environment. */ String[] methods(); /** * Calls a method from the list provided by {@link #methods()}. * <p/> * * @param method the name of the method to call. * @param context the context from which the method is called. * @param args the arguments to pass to the method. * @return the result of calling the method. Same as for callbacks. * @throws java.lang.NoSuchMethodException if there is no method with the * specified name. */ Object[] invoke(String method, Context context, Arguments args) throws Exception; }