/** * Creates a generic server for asynchronous communication with agent * and task handlers. * * Each agent is capable of performing specific tasks. A user may request * an agent to do something. The user interacts with a user interface to * make this request. Specific task handlers perform the actual work. Some * handlers coordinate the communication between task handlers and user * interfaces. * */ package com.jaivox.agent; import java.net.*; import java.util.*; public class Server extends Thread implements Runnable { int listenPort; protected ServerSocket server; String serverId; Vector <Session> clients; int idCount; static String defaultName = "Jvia"; public String Name; boolean Valid = false; public Server (int port) { Name = defaultName; } /** * Create a server with a specific id, which listens at the designated * port. @param name Name of the agent @param port Listen to this port for connection requests */ public Server (String name, int port) { Name = name; listenPort = port; idCount = 0; try { server = new ServerSocket (listenPort); start (); serverId = server.getInetAddress ().getHostName ()+"_"+port; Debug ("started server "+serverId+" name "+Name); clients = new Vector <Session> (); Valid = true; } catch (Exception e) { Debug (Name + e.toString ()); // Valid will be false } } public Server () { } public void Debug (String message) { System.out.println ("[Server]"+Name+":"+listenPort+" "+message); } public void run () { try { while (true) { Socket link = server.accept (); String id = Name+"_"+idCount; idCount++; Responder r = new Responder (); Session ias = new Session (id, this, link, r); clients.add (ias); Debug ("Added client "+ias.sid); } } catch (Exception e) { Debug ("Server:run "+e.toString ()); } } public void addSession (Session ias) { clients.add (ias); } public void removeSession (Session ias) { clients.remove (ias); Debug ("Removed client "+ias.sid); } public int sessionCount () { return clients.size (); } public Session findSession (String id) { int n = clients.size (); Debug ("looking for client with id "+id); for (int i=0; i<n; i++) { Session ias = clients.elementAt (i); Debug ("client "+i+" id is "+ias.sid); if (ias.sid.equals (id)) return ias; } return null; } public Session findSessionTo (String to) { int n = clients.size (); Debug ("looking for client to "+to); for (int i=0; i<n; i++) { Session ias = clients.elementAt (i); Debug ("client "+i+" id is "+ias.sid); if (ias.sid.startsWith (to)) return ias; } return null; } public int getListenPort () { return listenPort; } public void setListenPort (int listenPort) { this.listenPort = listenPort; } public ServerSocket getServer () { return server; } public void setServer (ServerSocket server) { this.server = server; } public String getServerId () { return serverId; } public void setServerId (String serverId) { this.serverId = serverId; } public Vector<Session> getClients () { return clients; } public void setClients (Vector<Session> clients) { this.clients = clients; } public int getIdCount () { return idCount; } public void setIdCount (int idCount) { this.idCount = idCount; } public boolean isValid () { return Valid; } public void setValid (boolean valid) { Valid = valid; } }