} else if (buf.equals("PONG")) { lastPing = 0; return;
	void decipherMessage(String msg) {		listener.log(msg);		String nick;		String host;		String recipient;		StringTokenizer tok = new StringTokenizer(msg, " ");		String buf = tok.nextToken();		if (buf.indexOf("!") != -1) {			nick = buf.substring(1, buf.indexOf("!"));			host = buf.substring(buf.indexOf("!")+1);		} else {			host = buf;			nick = "";		}		buf = tok.nextToken();		try {			int command = Integer.parseInt(buf);			switch (command) {			case 302://:Prothid.CA.US.GameSurge.net 302 Kali :Kali=+~sephiabot@adsl-221-75-195.rmo.bellsouth.net bigguy=+~bigguy@rdu163-63-180.nc.rr.com Thearc=+Sakura_Mus@047.162-78-65.ftth.swbr.surewest.net Vino=+~Vino@adsl-221-75-195.rmo.bellsouth.net Eke=+way2ez48bi@Ek3.user.gamesurge				String users = msg.substring(msg.indexOf(":", 1)+1);				listener.messageUserHosts(users);				return;//:ClanShells.DE.EU.GameSurge.net 352 Vino #tsbeta ~Vino adsl-221-57-217.rmo.bellsouth.net *.GameSurge.net Vino H :0 Jorge L. Rodriguez			case 352:				tok.nextToken();							//Bot's name				String userchannel = tok.nextToken();		//Channel				String username = tok.nextToken();			//User name				String userhost = tok.nextToken();			//User host				tok.nextToken();							//*.gamesurge.net ?				String usernick = tok.nextToken();			//User nick				tok.nextToken();							//H !				tok.nextToken();							//: and then server hop level				String realname = tok.nextToken("").trim();	//User's real name				listener.messageWho(userchannel, usernick, username, userhost, realname);				return;							case 353://:Extremity.CA.US.GamesNET.net 353 Robyn = #1973 :Robyn Max\DAd @Tempyst LittleMe @MechanicalGhost Mez` @Vino sada^game GOaT @Weine|Away @ChanServ shinobiwan @Yukie WillSchnevel +Feixeno				String channel = msg.substring(msg.indexOf("=") + 2, msg.indexOf(" ", msg.indexOf("=") + 2));				String list = msg.substring(msg.indexOf(":", 1)+1);				listener.messageChanList(channel, list);				return;							case 433://:NetFire.TX.US.GameSurge.net 433 * Kali :Nickname is already in use.				return;							default:			}					} catch (NumberFormatException nfe) {					}		if (buf.equals("PRIVMSG")) {			recipient = tok.nextToken();			String chat = tok.nextToken("");			chat = chat.substring(2);			if (chat.startsWith("\u0001ACTION ") && chat.endsWith("\u0001"))				listener.messagePrivEmote(nick, host, recipient, chat.substring(8, chat.length()-1));			else				listener.messagePrivMsg(nick, host, recipient, chat);			return;		} else if (buf.equals("NICK")) {			String newname = tok.nextToken("");			newname = newname.substring(2);			listener.messageNickChange(nick, host, newname);			return;		} else if (buf.equals("MODE")) {			recipient = tok.nextToken();			String mode = tok.nextToken().trim();			String victim;			if (tok.hasMoreElements()) {				victim = tok.nextToken("").trim();			} else {				victim = null;			}			if (mode.startsWith(":")) {				mode = mode.substring(1);			}			listener.messageModeChange(nick, host, recipient, mode, victim);			return;		} else if (buf.equals("JOIN")) {			String channel = tok.nextToken("");			channel = channel.substring(1);			if (channel.startsWith(":"))				channel = channel.substring(1);			listener.messageChannelJoin(nick, host, channel);			return;		} else if (buf.equals("PART")) {			String channel = tok.nextToken();			String message;			if (tok.hasMoreTokens()) {				message = tok.nextToken("");				message = message.substring(2);			} else {				message = null;			}			listener.messageChannelPart(nick, host, channel, message);			return;		} else if (buf.equals("QUIT")) {			String message = tok.nextToken("");			message = message.substring(2);			listener.messageQuit(nick, host, message);			return;		}		//Still can't figure out what it is.		listener.messageReceived(msg);	}