/// <summary> /// Áбí·þÎñ /// </summary> /// <param name="netState"></param> /// <param name="packetReader"></param> public static void Auth_HandleRealmList(NetState netState, PacketReader packetReader) { AuthExtendData extendData = netState.GetComponent <AuthExtendData>(AuthExtendData.COMPONENT_ID); if (extendData == null) { Debug.WriteLine("Auth_PacketHandlers.Auth_HandleRealmList(...) - extendData == null error!"); return; } if (extendData.IsLoggedIn == false) { Debug.WriteLine("Auth_PacketHandlers.Auth_HandleRealmList(...) - extendData.IsLoggedIn == false error!"); return; } if (extendData.IsAuthenticated == false) { Debug.WriteLine("Auth_PacketHandlers.Auth_HandleRealmList(...) - extendData.IsAuthenticated == false error!"); return; } byte iCommandID = packetReader.ReadByte(); uint iUnk = packetReader.ReadUInt32(); netState.Send(new Auth_RealmListResult()); }
/// <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="newNetState"></param> internal static void AuthInitializeNetState(object sender, NetStateInitEventArgs netStateInit) { if (netStateInit.NetStateInit != null) { // 初始化客户端 AuthExtendData extendData = new AuthExtendData(); netStateInit.NetStateInit.RegisterComponent <AuthExtendData>(AuthExtendData.COMPONENT_ID, extendData); // 获取包的ID netStateInit.NetStateInit.ReceiveBuffer.ThreadEventPacketID += new EventHandler <PacketIdInfoEventArgs>(AuthGetPacketID); // 截获输出的信息包 netStateInit.NetStateInit.EventSendPacket += new EventHandler <NetStateSendPacketEventArgs>(AuthSendPacket); } else { Debug.WriteLine("ProcessNet.Auth_InitializeNetState(...) - newNetState != null && newNetState.ExtendData == null error!"); } }
/// <summary> /// 登陆验证 /// </summary> /// <param name="netState"></param> /// <param name="packetReader"></param> public static void Auth_HandleAuthProof(NetState netState, PacketReader packetReader) { AuthExtendData extendData = netState.GetComponent <AuthExtendData>(AuthExtendData.COMPONENT_ID); if (extendData == null) { Debug.WriteLine("Auth_PacketHandlers.Auth_AuthProof(...) - extendData == null error!"); return; } if (extendData.IsLoggedIn == false) { Debug.WriteLine("Auth_PacketHandlers.Auth_AuthProof(...) - extendData.IsLoggedIn == false error!"); return; } extendData.AuthProof.AuthLogonProof = AuthLogonProof.ReadAuthLogonProof(packetReader); extendData.SRP.PublicEphemeralValueA = extendData.AuthProof.AuthLogonProof.PublicEphemeralValueA; if (extendData.SRP.IsClientProofValid(extendData.AuthProof.AuthLogonProof.ClientProof) == false) { // Authentication failed. //netState.Send( new RealmList_AuthProofResultError( RealmListErrorsInfo.LOGIN_NO_ACCOUNT ) ); netState.Send(new Auth_AuthChallengeResultError(LogineErrorInfo.LOGIN_NO_ACCOUNT)); return; } // 添加到全局的Key中 SrpHandler.AddSRP(extendData.WowAccount.AccountName, extendData.SRP); // we're authenticated now :) extendData.IsAuthenticated = true; netState.Send(new Auth_AuthProofResult(extendData.SRP)); }
/// <summary> /// /// </summary> /// <param name="newNetState"></param> internal static void AuthInitializeNetState( object sender, NetStateInitEventArgs netStateInit ) { if ( netStateInit.NetStateInit != null ) { // 初始化客户端 AuthExtendData extendData = new AuthExtendData(); netStateInit.NetStateInit.RegisterComponent<AuthExtendData>( AuthExtendData.COMPONENT_ID, extendData ); // 获取包的ID netStateInit.NetStateInit.ReceiveBuffer.ThreadEventPacketID += new EventHandler<PacketIdInfoEventArgs>( AuthGetPacketID ); // 截获输出的信息包 netStateInit.NetStateInit.EventSendPacket += new EventHandler<NetStateSendPacketEventArgs>( AuthSendPacket ); } else Debug.WriteLine( "ProcessNet.Auth_InitializeNetState(...) - newNetState != null && newNetState.ExtendData == null error!" ); }