override protected bool ProcessRequestInternal(
            RequestCache requestCache,
            out string result_code)
        {
            bool   success = true;
            string emailVerificationString = "";

            result_code = SuccessMessages.GENERAL_SUCCESS;

            // If the username contains any non-alphanumeric Characters, we can't accept it
            {
                Regex rgx = new Regex("[^a-zA-Z0-9]");

                m_username = rgx.Replace(m_username, "");
            }

            if (success &&
                m_username.Length == 0)
            {
                result_code = ErrorMessages.INVALID_USERNAME;
                success     = false;
            }

            if (success && m_password.Length == 0)
            {
                result_code = ErrorMessages.INVALID_PASSWORD;
                success     = false;
            }

            if (success &&
                !AsyncRPGSharedLib.Protocol.EMail.isWellFormedAddress(m_emailAddress))
            {
                result_code = ErrorMessages.MALFORMED_EMAIL;
                success     = false;
            }

            // Make sure the username isn't already taken
            if (success &&
                !AccountQueries.VerifyUsernameAvailable(requestCache.DatabaseContext, m_username))
            {
                result_code = ErrorMessages.RESERVED_USERNAME;
                success     = false;
            }

            if (success)
            {
                if (MailConstants.VerifyAccountEmail)
                {
                    AccountQueries.CreateAccount(
                        requestCache.DatabaseContext,
                        m_username,
                        m_password,
                        m_emailAddress,
                        out m_emailVerificationString);

                    if (AsyncRPGSharedLib.Protocol.EMail.SendVerifyAccountMessage(
                            m_emailAddress,
                            m_webServiceURL,
                            m_username,
                            emailVerificationString))
                    {
                        result_code = SuccessMessages.GENERAL_SUCCESS + "! Sending verification e-mail to " + m_emailAddress + ".";
                    }
                    else
                    {
                        result_code = ErrorMessages.SMTP_ERROR;
                        success     = false;
                    }
                }
                else
                {
                    AccountQueries.CreateAccountNoEmailVerify(
                        requestCache.DatabaseContext,
                        m_username,
                        m_password,
                        m_emailAddress,
                        DatabaseConstants.OpsLevel.player);

                    result_code = SuccessMessages.GENERAL_SUCCESS + "! Account now active (email verification off).";
                }
            }

            return(success);
        }