package jicos.system;
import java.rmi.*;
/** Interface used to communicate from the application to the
 * HSP.
 */
public interface HSP extends Remote
{
    /** Service name used in rmiregistry.
     */
    public static String NAME = "HSP";
    /** Get a Result from the HSP. This method
     * blocks until a Result is available.
     * @return a Result object that corresponds to some Task that was sent to the
     * HSP via the putTask method (i.e., for some particular task DAG).
     * @throws RemoteException This method is invoked remotely.
     */
    public Result getResult() throws RemoteException;
    /** Application gives a task to the HSP.
     * @param task is the root task of some Task graph.
     * @param computationId is an identifier for a computation (i.e., a root task).
     * @throws RemoteException This method is invoked remotely.
     */
    public void compute( Task task, int computationId ) throws RemoteException;
    
    /** login Client with the HSP.
     * @throws RemoteException This method is invoked remotely.
     * @param clientInfo Data container for client information associated with this consumer
     * client during this registration period (session).
     */
    public void login( Environment environment ) throws RemoteException;
    /** logout Client from the HSP.
     * @return Invoice, an object indicating how much system resources were
     * consumed by this application.
     * @throws RemoteException This method is invoked remotely.
     */
    public Invoice logout() throws RemoteException, InterruptedException;
}