package zutil.network.nio.worker.grid;

/**
 * This interface is the thread that will do 
 * all the computation in the grid
 * 
 * @author Ziver
 */
public abstract class GridThread implements Runnable{
	/**
	 * The initial static and final data will be sent to this 
	 * method.
	 * 
	 * @param data is the static and or final data
	 */
	public abstract void setInitData(Object data);
	
	public void run(){
		while(true){
			GridJob tmp = null;
			try {
				tmp = GridClient.getNextJob();
				compute(tmp);
			} catch (Exception e) {
				e.printStackTrace();
				if(tmp != null){
					GridClient.jobError(tmp.jobID);
				}
			}
		}
	}
	
	/**
	 * Compute the given data and return 
	 * @param data
	 */
	public abstract void compute(GridJob data) throws Exception;
}
