Ejemplo n.º 1
0
        /// <summary>
        /// 登陆握手
        /// </summary>
        /// <param name="netState"></param>
        /// <param name="packetReader"></param>
        public static void Auth_HandleAuthChallenge(NetState netState, PacketReader packetReader)
        {
            AuthExtendData extendData = netState.GetComponent <AuthExtendData>(AuthExtendData.COMPONENT_ID);

            if (extendData == null)
            {
                Debug.WriteLine("Auth_PacketHandlers.Auth_HandleAuthChallenge(...) - extendData == null error!");
                return;
            }

            if (extendData.IsLoggedIn == true)
            {
                Debug.WriteLine("Auth_PacketHandlers.Auth_HandleAuthChallenge(...) - extendData.IsLoggedIn == false error!");
                return;
            }

            extendData.AuthChallenge.AuthLogonChallenge = AuthLogonChallenge.ReadAuthLogonChallenge(packetReader);

            // 版本验证
            if (extendData.AuthChallenge.AuthLogonChallenge.Build > (ushort)CLIENT_VERSIONS.CLIENT_MAX || extendData.AuthChallenge.AuthLogonChallenge.Build < (ushort)CLIENT_VERSIONS.CLIENT_MIN)
            {
                netState.Send(new Auth_AuthChallengeResultError(LogineErrorInfo.LOGIN_WRONG_BUILD_NUMBER));
                return;
            }

            // 帐号是否存在
            WowAccount wowAccount = WowAccountHandler.GetAccount(extendData.AuthChallenge.AuthLogonChallenge.AccountName);

            if (wowAccount == null)
            {
                netState.Send(new Auth_AuthChallengeResultError(LogineErrorInfo.LOGIN_NO_ACCOUNT));
                return;
            }
            extendData.WowAccount = wowAccount;

            // 帐号是否停用
            if (wowAccount.Banned)
            {
                netState.Send(new Auth_AuthChallengeResultError(LogineErrorInfo.LOGIN_ACCOUNT_CLOSED));
                return;
            }

            // 帐号是否在线
            if (wowAccount.Locked)
            {
                netState.Send(new Auth_AuthChallengeResultError(LogineErrorInfo.LOGIN_ACCOUNT_FREEZED));
                return;
            }

            // 成功 更新IP
            WowAccountHandler.UpdateAccountLastIP(wowAccount.AccountName, netState.NetAddress.Address.ToString());

            // 登陆成功
            extendData.IsLoggedIn = true;

            // 获取SRP的Key
            extendData.SRP = new SecureRemotePassword(true, wowAccount.AccountName, wowAccount.Password);

            netState.Send(new Auth_AuthChallengeResult(extendData.SRP));
        }
Ejemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="packetReader"></param>
        /// <returns></returns>
        public static AuthLogonChallenge ReadAuthLogonChallenge(PacketReader packetReader)
        {
            AuthLogonChallenge authLogonChallenge = new AuthLogonChallenge();

            authLogonChallenge.CommandID = packetReader.ReadByte();
            authLogonChallenge.ErrorInfo = packetReader.ReadByte();
            authLogonChallenge.PackSize  = packetReader.ReadUInt16();

            packetReader.ReadBuffer(ref authLogonChallenge.m_iGameName, 0, 4);
            authLogonChallenge.GameName = authLogonChallenge.m_iGameName.ConvertToString();

            authLogonChallenge.Version1 = packetReader.ReadByte();
            authLogonChallenge.Version2 = packetReader.ReadByte();
            authLogonChallenge.Version3 = packetReader.ReadByte();
            authLogonChallenge.Build    = packetReader.ReadUInt16();

            packetReader.ReadBuffer(ref authLogonChallenge.m_iPlatform, 0, 4);
            authLogonChallenge.Platform = authLogonChallenge.m_iPlatform.ConvertToString();

            packetReader.ReadBuffer(ref authLogonChallenge.m_iOS, 0, 4);
            authLogonChallenge.OS = authLogonChallenge.m_iOS.ConvertToString();

            packetReader.ReadBuffer(ref authLogonChallenge.m_iCountry, 0, 4);
            authLogonChallenge.Country = authLogonChallenge.m_iCountry.ConvertToString();

            authLogonChallenge.TimeZoneBias      = packetReader.ReadUInt32();
            authLogonChallenge.IP                = packetReader.ReadUInt32();
            authLogonChallenge.AccountNameLength = packetReader.ReadByte();

            // 不用了
            //packetReader.ReadBuffer( ref authLogonChallenge.m_iAccountName, 0, authLogonChallenge.AccountNameLength );
            //authLogonChallenge.AccountName = Utility.ByteArrayToString( authLogonChallenge.AccountName, 0, authLogonChallenge.AccountNameLength );

            authLogonChallenge.AccountName = packetReader.ReadUTF8StringSafe();

            return(authLogonChallenge);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="packetReader"></param>
        /// <returns></returns>
        public static AuthLogonChallenge ReadAuthLogonChallenge( PacketReader packetReader )
        {
            AuthLogonChallenge authLogonChallenge = new AuthLogonChallenge();

            authLogonChallenge.CommandID = packetReader.ReadByte();
            authLogonChallenge.ErrorInfo = packetReader.ReadByte();
            authLogonChallenge.PackSize = packetReader.ReadUInt16();

            packetReader.ReadBuffer( ref authLogonChallenge.m_iGameName, 0, 4 );
            authLogonChallenge.GameName = authLogonChallenge.m_iGameName.ConvertToString();

            authLogonChallenge.Version1 = packetReader.ReadByte();
            authLogonChallenge.Version2 = packetReader.ReadByte();
            authLogonChallenge.Version3 = packetReader.ReadByte();
            authLogonChallenge.Build = packetReader.ReadUInt16();

            packetReader.ReadBuffer( ref authLogonChallenge.m_iPlatform, 0, 4 );
            authLogonChallenge.Platform = authLogonChallenge.m_iPlatform.ConvertToString();

            packetReader.ReadBuffer( ref authLogonChallenge.m_iOS, 0, 4 );
            authLogonChallenge.OS = authLogonChallenge.m_iOS.ConvertToString();

            packetReader.ReadBuffer( ref authLogonChallenge.m_iCountry, 0, 4 );
            authLogonChallenge.Country = authLogonChallenge.m_iCountry.ConvertToString();

            authLogonChallenge.TimeZoneBias = packetReader.ReadUInt32();
            authLogonChallenge.IP = packetReader.ReadUInt32();
            authLogonChallenge.AccountNameLength = packetReader.ReadByte();

            // 不用了
            //packetReader.ReadBuffer( ref authLogonChallenge.m_iAccountName, 0, authLogonChallenge.AccountNameLength );
            //authLogonChallenge.AccountName = Utility.ByteArrayToString( authLogonChallenge.AccountName, 0, authLogonChallenge.AccountNameLength );

            authLogonChallenge.AccountName = packetReader.ReadUTF8StringSafe();

            return authLogonChallenge;
        }