/// <summary>
        /// The parse.
        /// </summary>
        /// <param name="client">
        /// </param>
        /// <param name="packet">
        /// </param>
        /// <param name="messageNumber">
        /// </param>
        /// <returns>
        /// </returns>
        public bool Parse(Client client, byte[] packet, ushort messageNumber)
        {
            switch (messageNumber)
            {
            case 0:
                Authenticate.Read(client, ref packet);
                break;

            case 2:

                // Chat bot wants to authenticate
                AuthenticateBot.Read(client, packet);
                break;

            case 3:
                LoginCharacter.Read(client, packet);
                break;

            case 21:
                PlayerNameLookup.Read(client, packet);
                break;

            case 30:
                Tell.Read(client, packet);
                break;

            case 40:
                BuddyAdd.Read(client, packet);
                break;

            case 41:
                new BuddyRemove().Read(client, packet);
                break;

            case 42:
                new OnlineStatus().Read(client, packet);
                break;

            case 50:
                new PrivateGroupInvitePlayer().Read(client, packet);
                break;

            case 51:
                new PrivateGroupKickPlayer().Read(client, packet);
                break;

            case 52:
                new PrivateGroupJoin().Read(client, packet);
                break;

            case 53:
                new PrivateGroupLeave().Read(client, packet);
                break;

            case 54:

                // this packet should have no data to read
                PrivateGroupKickEveryone.Read(client, ref packet);
                break;

            case 57:
                new PrivateGroupMessage().Read(client, packet);
                break;

            case 64:
                new ChannelDataSet().Read(client, packet);
                break;

            case 65:
                ChannelMessage.Read(client, packet);
                break;

            case 66:
                new ChannelMode().Read(client, packet);
                break;

            case 70:
            case 71:

                // should never get these messages (ClimodeGet and ClimodeSet)
                break;

            case 100:

                // Ping
                client.Send(packet);
                break;

            case 110:
                break;

            case 120:
                new ChatCommand().Read(client, packet);
                break;

            default:
                client.Server.Warning(client, "Client sent unknown message {0}", messageNumber.ToString());
                return(false);
            }

            return(true);
        }