Exemplo n.º 1
0
        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;
            }
        }