//import java.net.*; //import java.io.*; import java.util.Date; import java.util.Vector; import java.util.HashMap; import java.io.IOException; import java.util.StringTokenizer; import java.io.File; import java.nio.channels.FileChannel; import java.io.FileInputStream; import java.io.FileOutputStream; import java.net.ServerSocket; import java.net.Socket; import java.io.PrintWriter; import java.io.BufferedReader; import java.io.InputStreamReader; import java.text.SimpleDateFormat; import java.io.FileNotFoundException; public class JobQServer{ private class Job { private int[] taskStatus=null; private int progress=-1; private int job_status=0; private static final int STATUS_WROTE=-1; private int[] jobSize=null; private int[] cumProd=null; private int allProd=0; private void init() { int k=jobSize.length; cumProd=new int[k]; cumProd[k-1]=1; for (int i=k-1; i>0; i--) { cumProd[i-1]=cumProd[i]*jobSize[i]; } allProd=cumProd[0]*jobSize[0]; taskStatus=new int[allProd]; for (int i=0; iallProd-1) { throw new ArrayIndexOutOfBoundsException(); } else { for (int i=0; i jobSize[i]-1) { throw new ArrayIndexOutOfBoundsException(); } else { retVal+=(sub[i]-1)*cumProd[i]; } } retVal++; return retVal; } public Job(int[] js) { jobSize=new int[js.length]; for (int i=0; i job=null; private ServerSocket serverSocket=null; public JobQServer() { job=new HashMap(); // Start server int port=JOBQSERVER_PORT; try { serverSocket = new ServerSocket(port); } catch (IOException e) { System.err.println("Could not listen on port: "+port+"."); System.exit(1); } System.err.println("JobQServer running.."); } public void listenRespondLoop() throws IOException { // Loop over client connections Socket clientSocket = null; while (true) { try { clientSocket = serverSocket.accept(); } catch (IOException e) { System.err.println("Accept failed."); System.exit(1); } // set up input/output with the client PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String outStr=null; String data=in.readLine(); try { // write initial server log String dateStr=new SimpleDateFormat("MMM d yyyy HH:mm:ss Z").format(new java.util.Date()); String clientUrlStr=clientSocket.getInetAddress().getHostName(); System.err.print("--DATE-- "+dateStr+" --FROM-- "+clientUrlStr+" --DATA-- "+data); // execute client request StringTokenizer st=new StringTokenizer(data); String arg1=st.nextToken(); if (arg1.equals("HAOexit")) { System.exit(0); } else if (arg1.equals("clear")) { job.clear(); } else { String jobname=arg1; String arg2=st.nextToken(); if (arg2.equals("clear")) { if (job.containsKey(jobname)) { job.get(jobname).clear(); outStr="job "+jobname+" cleared"; } else { outStr="job "+jobname+" cleared (didn't exist)"; } } else if (arg2.equals("reset")) { job.get(jobname).reset(); outStr="job "+jobname+" reset"; } else if (arg2.equals("next")) { if (job.containsKey(jobname)) { outStr=job.get(jobname).nextStr(); } else { outStr="job "+jobname+" not allocated yet."; } } else if (arg2.equals("alloc")) { // Vector jobSize=new Vector(); // while (st.hasMoreTokens()) { // jobSize.add(Integer.parseInt(st.nextToken())); // } if (job.containsKey(jobname)) { // help out on garbage collection job.remove(jobname); } job.put(jobname,new Job(st)); outStr="job "+jobname+" allocated"; } else if (arg2.equals("wrote")) { int k=job.get(jobname).jobNumDim(); int[] vi=new int[k]; for (int i=0; i --REPLY-- "+outStr); // write to client out.println(outStr); out.flush(); } catch (Exception e) { System.err.println("Error during processing client command."); e.printStackTrace(); } out.close(); in.close(); clientSocket.close(); } // serverSocket.close(); } public static void main(String[] args) throws IOException { JobQServer jqserver=new JobQServer(); jqserver.listenRespondLoop(); } }