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);
+ }
}
}