package org.vamsas.client.simpleclient; import org.vamsas.client.*; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.util.Vector; /** * @author jim * Handler for the clientsFile within a vamsas session. */ public class ClientsFile { private File filelist; /** * number of my client in list * (not known at start but used when known to make lock) */ private int syncnum=1; ClientsFile(File filelist) { this.filelist=filelist; } public ClientHandle[] retrieveClientList() { if (filelist!=null) { if (filelist.exists()) { Lock listlock; do { listlock = new Lock(filelist); // TODO: wait around if we can't get the lock. } while (!listlock.isLocked()); try { ObjectInputStream is = new ObjectInputStream(new BufferedInputStream(new java.io.FileInputStream(filelist))); ClientHandle[] clients; clients = (ClientHandle[]) ((Vector) is.readObject()).toArray(); return clients; } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } // else return null. } else { throw new Error("Tried to retrieve a clientList without specifying client list filename"); } return null; } public boolean putClientList(ClientHandle[] clients) { if (filelist!=null) { if (filelist.exists()) { Lock listlock; do { listlock = new Lock(filelist); // TODO: wait around if we can't get the lock? should return and make client wait until write has finished so it can read new client info... } while (!listlock.isLocked()); try { File templist=File.createTempFile(filelist.getName(),".temp",filelist); ObjectOutputStream os = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(templist))); os.writeObject(clients); os.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } // else return null. } else { throw new Error("Tried to retrieve a clientList without specifying client list filename"); } return false; } }