Author: bdonlan
Date: 2005-05-23 19:14:31 -0400 (Mon, 23 May 2005)
New Revision: 716

Modified:
   trunk/clients/Javer2/src/org/haverdev/haver/server/Lobby.java
   trunk/clients/Javer2/src/org/haverdev/haver/server/UserConnection.java
Log:
C: LIST, yo!

Modified: trunk/clients/Javer2/src/org/haverdev/haver/server/Lobby.java
===================================================================
--- trunk/clients/Javer2/src/org/haverdev/haver/server/Lobby.java       
2005-05-23 22:56:27 UTC (rev 715)
+++ trunk/clients/Javer2/src/org/haverdev/haver/server/Lobby.java       
2005-05-23 23:14:31 UTC (rev 716)
@@ -20,6 +20,7 @@
     
     /** There can be only one */
     private Lobby() {
+        register(this);
     }
 
     public static final String[] emptyArray = {};
@@ -28,7 +29,11 @@
         HashMap subset = (HashMap)namespaces.get(namespace.toLowerCase());
         if (subset == null)
             return emptyArray;
-        return (String[])subset.keySet().toArray();
+        Object[] objs = subset.keySet().toArray();
+        String[] strs = new String[objs.length];
+        for (int i = 0; i < objs.length; i++)
+            strs[i] = (String)objs[i];
+        return strs;
     }
 
     public synchronized boolean contains(Entity what) {
@@ -44,7 +49,11 @@
     }
 
     public synchronized Entity[] getContents() {
-        return (Entity[])everything.toArray();
+        Object[] objs = everything.toArray();
+        Entity[] ents = new Entity[objs.length];
+        for (int i = 0; i < objs.length; i++)
+            ents[i] = (Entity)objs[i];
+        return ents;
     }
 
     public synchronized boolean contains(String namespace, String name) {

Modified: trunk/clients/Javer2/src/org/haverdev/haver/server/UserConnection.java
===================================================================
--- trunk/clients/Javer2/src/org/haverdev/haver/server/UserConnection.java      
2005-05-23 22:56:27 UTC (rev 715)
+++ trunk/clients/Javer2/src/org/haverdev/haver/server/UserConnection.java      
2005-05-23 23:14:31 UTC (rev 716)
@@ -103,6 +103,17 @@
         return out.toString();
     }
     
+    public final static String join(String joinBy, String[] parts) {
+        if (parts.length == 0) return "";
+        
+        StringBuffer b = new StringBuffer();
+        for (int i = 0; i < parts.length; i++) {
+            b.append(joinBy);
+            b.append(parts[i]);
+        }
+        return b.toString().substring(joinBy.length());
+    }
+    
     /** Creates a new instance of UserConnection */
     public UserConnection(Socket s) throws IOException {
         sock = s;
@@ -127,6 +138,7 @@
                 if (line == null) {
                     throw new IOException("Disconnected.");
                 }
+                System.err.println("C: " + line);
                 try {
                     processLine(line);
                 }
@@ -142,14 +154,19 @@
         }
     }
     
-    protected void ioExcept(IOException e) {
+    protected synchronized void ioExcept(IOException e) {
         e.printStackTrace();
         try { writer.close(); } catch (Throwable t) { }
         try { sock.close(); } catch (Throwable t) { }
+        writer = null;
+        if (this.e != null)
+            Lobby.theLobby.unregister(this.e);
     }
     
     public synchronized void sendLine(String[] args) {
+        if (writer == null) return;
         String line = encodeLine(args);
+        System.err.print("S: " + line);
         writer.print(line);
         writer.flush();
     }
@@ -276,7 +293,7 @@
     
     public final class UserAlreadyExists extends SimplePropagatedException {
         public UserAlreadyExists(String name) {
-            super("IDENT", "exists.user", "User " + name + " is in use");
+            super("IDENT", "exists.user", name);
         }
     }
     
@@ -349,5 +366,18 @@
             System.arraycopy(args, 2, margs, 0, margs.length);
             them.sendPrivateMessage(e.getName(), margs);
         }
+        
+        public void handle_LIST(String[] args) throws PropagatedException {
+            String channel = args[1];
+            String filter  = args[2];
+            Channel theChannel = (Channel)Lobby.theLobby.lookup("channel", 
channel);
+            if (theChannel == null)
+                throw new SimplePropagatedException("LIST", "unknown.channel", 
channel);
+            String[] members = theChannel.getNames(filter);
+            String[] response = new String[members.length + 3];
+            System.arraycopy(args, 0, response, 0, 3);
+            System.arraycopy(members, 0, response, 3, members.length);
+            sendLine(response);
+        }
     }
 }


Reply via email to