public void HandleMessage(BroadcastChatClient client, string msg) { // If we get a blank message, do nothing. if (msg.Trim() == string.Empty || msg == null) { return; } string[] parts = msg.Split(' '); // We can't have clients doing anything until we know who they are. if (client.Nick == null && parts[0].ToUpper() != "NICK") { client.SendErrorNickNotSet(); return; } client.TimeOfLastMessage = client.Watch.Elapsed; switch (parts[0].ToUpper()) { case "BAN": if (parts.Length < 3) { client.SendErrorArgLength(parts[0].ToUpper(), 3, parts.Length); } else { handleBan(client, parts[1], parts[2]); } break; case "BANLIST": if (parts.Length < 2) { client.SendErrorArgLength(parts[0].ToUpper(), 2, parts.Length); } else { handleBanList(client, parts[1]); } break; case "CHANLIST": handleChanList(client); break; case "CHANMSG": if (parts.Length < 3) { client.SendErrorArgLength(parts[0].ToUpper(), 3, parts.Length); } else { handleChanMsg(client, parts[1], sliceArray(parts, 2, parts.Length, " ")); } break; case "CHANOPER": if (parts.Length < 4) { client.SendErrorArgLength(parts[0].ToUpper(), 4, parts.Length); } else { handleChanOper(client, parts[1], parts[2], parts[3]); } break; case "JOIN": if (parts.Length < 2) { client.SendErrorArgLength(parts[0].ToUpper(), 2, parts.Length); } else { handleJoin(client, parts[1]); } break; case "KICK": if (parts.Length < 3) { client.SendErrorArgLength(parts[0].ToUpper(), 3, parts.Length); } else { handleKick(client, parts[1], parts[2]); } break; case "LEAVE": if (parts.Length < 3) { client.SendErrorArgLength(parts[0].ToUpper(), 3, parts.Length); } else { handleLeave(client, parts[1], sliceArray(parts, 2, parts.Length, " ")); } break; case "NICK": if (parts.Length < 2) { client.SendErrorArgLength(parts[0].ToUpper(), 2, parts.Length); } else { handleNick(client, parts[1]); } break; case "PRIVMSG": if (parts.Length < 3) { client.SendErrorArgLength(parts[0].ToUpper(), 3, parts.Length); } else { handlePrivMsg(client, parts[1], sliceArray(parts, 2, parts.Length, " ")); } break; case "QUIT": if (parts.Length < 2) { client.SendErrorArgLength(parts[0].ToUpper(), 2, parts.Length); } else { handleQuit(client, sliceArray(parts, 1, parts.Length, " ")); } break; case "TOPIC": if (parts.Length < 3) { client.SendErrorArgLength(parts[0].ToUpper(), 3, parts.Length); } else { handleTopic(client, parts[1], sliceArray(parts, 2, parts.Length, " ")); } break; case "UNBAN": if (parts.Length < 3) { client.SendErrorArgLength(parts[0].ToUpper(), 3, parts.Length); } else { handleUnban(client, parts[1], parts[2]); } break; case "USERLIST": if (parts.Length < 2) { client.SendErrorArgLength(parts[0].ToUpper(), 2, parts.Length); } else { handleUserList(client, parts[1]); } break; case "WHOIS": if (parts.Length < 2) { client.SendErrorArgLength(parts[0].ToUpper(), 2, parts.Length); } else { handleWhois(client, parts[1]); } break; // If the first word in the message is not a command, send an error message. default: client.SendErrorNotACommand(parts[0].ToUpper()); break; } }