/// <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)); }
/// <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); }
/// <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; }