/** * Method to ignore all incoming messages from a user * * @param i the user to ignore * @param quite if true will not show confirmation * @return true on succes, false on failure */ private boolean ignore(String i, boolean quiet) { if (username.equals(i) || i.equals("server") || admins.contains(i)) { if (!quiet) { error("can't ignore that person"); } return false; } if (!users.contains(i)) { if (!quiet) { error("user does not exists"); } return false; } if (ignores.contains(i)) { if (!quiet) { error("already ignoring user"); } return false; } ignores.add(i); updateList(); if (!quiet) { serverMessage("ignoring " + i); } return true; }
/** * adds a new user to the interal list of users * * @param un the name of the user to be added */ public void userAdd(String un) { if (!users.contains(un)) { users.add(un); updateList(); if (!un.equals(username) && showUserStatus) serverMessage(un + " has joined " + server.channel); } }
/** cleans up a connection by removing all user from all maintained lists */ public void close() { error("Connection to server was lost"); admin = false; users.clear(); afks.clear(); ignores.clear(); admins.clear(); channels.clear(); cboChannels.removeAllItems(); updateList(); }
/** * Recieving method for private * * @param un the name of the user sending the message * @param message the message that was sent */ public void recievePrivate(String un, String message) { if (!ignores.contains(un)) { privates.recievePrivate(un, message); } }
/** * Reciving method for a whisper * * @param un the name of the user sending the whisper * @param message the message that was sent */ public void recieveWhisper(String un, String message) { if (!ignores.contains(un)) { sendText(un, message, true); } }
/** * Recieving method for a chat message * * @param un the name of the user sending the chat * @param message the message that was sent */ public void recieveChat(String un, String message) { if (!ignores.contains(un)) { sendText(un, message, false); } }
/** * changes the name of a user, updating list of admins, afks, ignoes, and master user list * * @param on old username * @param nn new username */ public void rename(String on, String nn) { if (admins.contains(on)) { admins.remove(admins.indexOf(on)); admins.add(nn); } if (afks.contains(on)) { afks.remove(afks.indexOf(on)); afks.add(nn); } if (ignores.contains(on)) { ignores.remove(ignores.indexOf(on)); ignores.add(nn); } users.remove(on); users.add(nn); updateList(); serverMessage(on + " renamed to " + nn); }
/** * removes a user from the user list * * @param un the name of the user to be removed */ public void userDel(String un) { users.remove(users.indexOf(un)); if (ignores.contains(un)) { ignores.remove(ignores.indexOf(un)); } if (afks.contains(un)) { afks.remove(afks.indexOf(un)); } if (admins.contains(un)) { admins.remove(admins.indexOf(un)); } updateList(); serverMessage(un + " has left " + server.channel); privates.serverMessage(un, un + " has left"); }
/** sorts the user list and rebuilds the user list from the sorted user vector, */ public void updateList() { Object[] tmp = users.toArray(); Arrays.sort(tmp); userList.setListData(tmp); }
/** * Method to parse a command and perform the specified action * * @param cmd the command that the user typed * @return a status indicator to tell if the command was valid */ public boolean parseCommand(String cmd) { cmd = cmd.intern(); if (cmd == "help" || cmd == "?") { String commands = "Listing available commands:\n" + "<pre>\\help or \\? \t\t- display this message<br>" + "\\admin <passphrase> \t- become an admin<br>" + "\\create <channel> [password]\t- create a new channel with optional password<br>" + "\\join <channel> [password]\t- join channel with optional password<br>" + "\\disconnect \t\t- disconnect from server<br>" + "\\whisper <user> <message> \t- whisper to a user<br>" + "\\private <user> \t- start a private message session<br>" + "\\ignore <user> \t- ignores a user<br>" + "\\clearignore \t\t- clear list of ignores<br>" + "\\reconnect \t\t- attempt to reconnect to server<br>" + "\\rename <new name> \t- change your username<br>" + "\\invite <user> \t- invite user to join at your channel<br>"; if (admin) { commands += "\\kick <user> \t\t- kick user from room<br>" + "\\logstart \t\t- start logging sessoin<br>" + "\\logstop \t\t- stop logging session<br>"; } commands += "up or down \t\t- cycle your chat history</pre>"; sendText("server", commands, false); return true; } else if (cmd == "disconnect") { if (server != null) { stop(); } return true; } else if (cmd == "reconnect") { if (username == null) { error( "username still invalid. use \\rename <new name> to chose a new name and reconnect"); } else { if (server != null) { stop(); } server = new ServerConnection(this); } return true; } else if (cmd == "clearignore") { ignores.clear(); updateList(); serverMessage("ignore list cleared"); return true; } else if (cmd.startsWith("whisper")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\whisper <user> <message>"); return false; } cmd = cmd.substring(start + 1); start = cmd.indexOf(' '); if (start < 0) { error("usage: \\whisper <user> <message>"); return false; } String un = cmd.substring(0, start); if (username.equals(un) || !users.contains(un)) { error("invalid user"); return false; } String message = cmd.substring(start + 1); if (message.length() < 1) { error("usage: \\whisper <user> <message>"); } sendWhisper(un, message); sendText(username, message, true); return true; } else if (cmd.startsWith("invite")) { String channel = (String) cboChannels.getSelectedItem(); int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\invite <user>"); return false; } String un = cmd.substring(start + 1); if ((un.length() < 1) || (un.length() > 10) || (!un.matches("[\\w_-]+?"))) { error(un + " invalid user"); return false; } if (username.equals(un)) { error("You cannot invite youself"); return false; } if (users.contains(un)) { error(un + " is already in your Channel"); return false; } String message = un + " has been invited to join a channel " + channel; sendInvite(un, message); sendText(username, message, false); return true; } else if (cmd.startsWith("private")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\private <user>"); return false; } String un = cmd.substring(start + 1); if (username.equals(un)) { error("cannot private message yourself"); return false; } privates.newPrivate(un); return true; } else if (cmd.startsWith("rename")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\rename <newname>"); return false; } String newName = cmd.substring(start + 1); if ((newName.length() < 1) || (newName.length()) > 10 || (newName.equals("server")) || (!newName.matches("[\\w_-]+?"))) { error("invalid name"); return false; } if (!server.connected) { server = new ServerConnection(this); } if (username == null) { username = newName; server.writeObject(new SD_UserAdd(newName)); } else { rename(username, newName); username = newName; server.writeObject(new SD_Rename(null, username)); } return true; } else if (cmd.startsWith("ignore")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\ignre <user>"); return false; } ignore(cmd.substring(start + 1), false); return true; } else if (cmd.startsWith("join")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\join <channel> [password]"); return false; } String name = cmd.substring(start + 1); String pass = null; start = name.indexOf(' '); if (start > 0) { pass = name.substring(start + 1); name = name.substring(0, start); } server.writeObject(new SD_Channel(false, name, pass)); return true; } else if (cmd.startsWith("create")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\create <channel> [password]"); return false; } String name = cmd.substring(start + 1); String pass = null; start = name.indexOf(' '); if (start > 0) { pass = name.substring(start + 1); name = name.substring(0, start); } server.writeObject(new SD_Channel(true, name, pass)); return true; /* } else if (cmd.startsWith("proxy")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\proxy <host> <port>"); return false; } String phost = cmd.substring(start+1); start = phost.indexOf(' '); if (start < 0) { error("usage: \\proxy <host> <port>"); return false; } String pport = phost.substring(start+1); phost = phost.substring(0, start); Properties systemSettings = System.getProperties(); systemSettings.put("proxySet", "true"); systemSettings.put("proxyHost", phost); systemSettings.put("proxyPort", pport); System.setProperties(systemSettings); serverMessage("Using " + phost + ":" + pport + " as proxy server<br>you can type \\reconnect to reconnect with this proxy"); return true; */ } else if (cmd.startsWith("admin")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\admin <password>"); return false; } String pass = cmd.substring(start + 1); server.writeObject(new SD_AdminAdd(pass)); return true; } else if (admin && cmd.startsWith("kick")) { int start = cmd.indexOf(' '); if (start < 0) { error("usage: \\kick <user>"); return false; } String un = cmd.substring(start + 1); if (un.equals(username)) { error("cannot kick yourself"); return false; } server.writeObject(new SD_Kick(un)); return true; } else if (admin && cmd == "logstart") { server.writeObject(new SD_Log(true)); return true; } else if (admin && cmd == "logstop") { server.writeObject(new SD_Log()); return true; } error("unrecognized command, type \\help for help"); return false; }