/// <summary> /// /// </summary> /// <param name="newNetState"></param> internal static void NetState_InitializeNetState(NetState newNetState) { if (newNetState != null && newNetState.EncoderSeed == null && newNetState.ExtendData == null) { // 初始化客户端加密的数据种子 newNetState.EncoderSeed = m_CryptTableBuffers.AcquireBuffer(); Buffer.BlockCopy(ROSECrypt.Instance().CryptTableBuffer, 0, newNetState.EncoderSeed, 0, ROSECrypt.Instance().CryptTableBuffer.Length); LoginServerExtendData l_ExtendData = new LoginServerExtendData(); newNetState.ExtendData = l_ExtendData; } else { Debug.WriteLine("ProcessNet.NetState_InitializeNetState(...) - newNetState != null && newNetState.Seed == null && newNetState.ExtendData == null error!"); } }
/// <summary> /// /// </summary> /// <param name="netState"></param> /// <param name="packetReader"></param> internal static void LoginServerGetServerNameList(NetState netState, PacketReader packetReader) { LOGs.WriteLine(LogMessageType.MSG_NOTICE, "LoginPacketHandlers.LoginServerGetServerNameList(...){0}", Thread.CurrentThread.Name); LoginServerExtendData l_ExtendData = netState.ExtendData as LoginServerExtendData; if (l_ExtendData == null) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerGetServerNameList(...) - l_ExtendData == null error!"); return; } if (l_ExtendData.IsLoggedIn == false) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerGetServerNameList(...) - l_ExtendData.IsLoggedIn == false error!"); return; } if (packetReader.Size < 10 /*6 + 4*/) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerGetServerNameList(...) - packetReader.Size < 10 error!"); return; } int l_iChannelGuid = packetReader.ReadInt32(); bool l_bIsReturn = false; ServerInfo[] l_ServerInfoArray = new ServerInfo[0]; Session l_Session = new Session(BaseDatabase.Domain); l_Session.BeginTransaction(); { do { Query l_QueryChannels = new Query(l_Session, "Select Channels instances where {OwnerGuid}=@ChannelGuid"); l_QueryChannels.Parameters.Add("@ChannelGuid", l_iChannelGuid); QueryResult l_ChannelsResult = l_QueryChannels.Execute(); if (l_ChannelsResult == null) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerGetServerNameList(...) - l_ChannelsResult == null error!"); l_bIsReturn = true; break; } if (l_ChannelsResult.Count <= 0) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerGetServerNameList(...) - l_ChannelsResult.Count <= 0 error!"); l_bIsReturn = true; break; } l_ServerInfoArray = new ServerInfo[l_ChannelsResult.Count]; for (int iIndex = 0; iIndex < l_ChannelsResult.Count; iIndex++) { Channels l_Channels = l_ChannelsResult[iIndex] as Channels; if (l_Channels == null) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerGetServerNameList(...) - l_Channels == null error!"); l_bIsReturn = true; break; } long iFullPercent = (((100 * l_Channels.Connected) / l_Channels.MaxConnected == 0 ? 1 : l_Channels.MaxConnected) / 5) & 0xFF; l_ServerInfoArray[iIndex] = new ServerInfo(l_Channels.ServerName, l_Channels.ServerGuid, iFullPercent, TimeZone.CurrentTimeZone, new IPEndPoint(IPAddress.Parse(l_Channels.Host), l_Channels.Port)); } } while (false); } l_Session.Commit(); if (l_bIsReturn == true) { return; } netState.Send(new GetServerNameListAck(l_ServerInfoArray, l_iChannelGuid)); }
/// <summary> /// /// </summary> /// <param name="netState"></param> /// <param name="packetReader"></param> internal static void LoginServerGetServerIP(NetState netState, PacketReader packetReader) { LOGs.WriteLine(LogMessageType.MSG_NOTICE, "LoginPacketHandlers.LoginServerGetServerIP(...){0}", Thread.CurrentThread.Name); LoginServerExtendData l_ExtendData = netState.ExtendData as LoginServerExtendData; if (l_ExtendData == null) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerGetServerIP(...) - l_ExtendData == null error!"); return; } if (l_ExtendData.IsLoggedIn == false) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerGetServerIP(...) - l_ExtendData.IsLoggedIn == false error!"); return; } if (packetReader.Size < 11 /*6 + 5*/) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerGetServerIP(...) - packetReader.Size < 11 error!"); return; } int l_iServerGuid = packetReader.ReadInt32(); int l_iChannelGuid = packetReader.ReadByte(); bool l_bIsReturn = false; ServerInfo l_ServerInfo = null; Session l_Session = new Session(BaseDatabase.Domain); l_Session.BeginTransaction(); { do { Query l_QueryAccounts = new Query(l_Session, "Select Accounts instances where {AccountsGuid}=@AccountGuid"); l_QueryAccounts.Parameters.Add("@AccountGuid", l_ExtendData.AccountsGuid); QueryResult l_AccountsResult = l_QueryAccounts.Execute(); if (l_AccountsResult == null) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerGetServerIP(...) - l_AccountsResult == null error!"); l_bIsReturn = true; break; } if (l_AccountsResult.Count != 1) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerGetServerIPList(...) - l_AccountsResult.Count != 1 error!"); l_bIsReturn = true; break; } Accounts l_Accounts = l_AccountsResult[0] as Accounts; if (l_Accounts == null) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerGetServerNameList(...) - l_Accounts == null error!"); l_bIsReturn = true; break; } l_Accounts.LastLoginDate = DateTime.Now; l_Accounts.LastServerGuid = l_iChannelGuid; l_Accounts.LastIP = netState.NetAddress.ToString(); ////////////////////////////////////////////////////////////////////////// Query l_QueryChannels = new Query(l_Session, "Select Channels instances where {ServerGuid}=@ServerGuid"); l_QueryChannels.Parameters.Add("@ServerGuid", l_iServerGuid); QueryResult l_ChannelsResult = l_QueryChannels.Execute(); if (l_ChannelsResult == null) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerGetServerIP(...) - l_ChannelsResult == null error!"); l_bIsReturn = true; break; } if (l_ChannelsResult.Count != 1) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerGetServerIPList(...) - l_ChannelsResult.Count != 1 error!"); l_bIsReturn = true; break; } Channels l_Channels = l_ChannelsResult[0] as Channels; if (l_Channels == null) { Debug.WriteLine("PacketHandlers.LoginServerGetServerNameList(...) - l_Channels == null error!"); l_bIsReturn = true; break; } l_ServerInfo = new ServerInfo(l_Channels.ServerName, l_Channels.ServerGuid, l_Channels.Status, TimeZone.CurrentTimeZone, new IPEndPoint(IPAddress.Parse(l_Channels.Host), l_Channels.Port)); } while (false); } l_Session.Commit(); if (l_bIsReturn == true) { return; } if (l_ServerInfo != null) { netState.Send(new GetServerIPAck(l_ServerInfo, (int)l_ExtendData.AccountsGuid)); } }
/// <summary> /// /// </summary> /// <param name="netState"></param> /// <param name="packetReader"></param> internal static void LoginServerAccountLogin(NetState netState, PacketReader packetReader) { LOGs.WriteLine(LogMessageType.MSG_NOTICE, "LoginPacketHandlers.LoginServerAccountLogin(...){0}", Thread.CurrentThread.Name); LoginServerExtendData l_ExtendData = netState.ExtendData as LoginServerExtendData; if (l_ExtendData == null) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerAccountLogin(...) - l_ExtendData == null error!"); AccountLogin_ReplyRej(netState, LoginReason.LoginFailed); return; } if (l_ExtendData.IsLoggedIn == true) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerAccountLogin(...) - l_ExtendData.IsLoggedIn == true error!"); AccountLogin_ReplyRej(netState, LoginReason.LoginFailed); return; } if (packetReader.Size < 38 /*6 + 32*/) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerAccountLogin(...) - packetReader.Size < 38 error!"); AccountLogin_ReplyRej(netState, LoginReason.LoginFailed); return; } string l_strPassword = packetReader.ReadString(32); string l_strUsername = packetReader.ReadStringSafe(); bool l_bIsReturn = false; Session l_Session = new Session(BaseDatabase.Domain); l_Session.BeginTransaction(); { do { Query l_QueryAccounts = new Query(l_Session, "Select Accounts instances where {AccountsName}=@Username"); l_QueryAccounts.Parameters.Add("@Username", l_strUsername); QueryResult l_AccountsResult = l_QueryAccounts.Execute(); if (l_AccountsResult == null) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerAccountLogin(...) - l_AccountsResult == null error!"); AccountLogin_ReplyRej(netState, LoginReason.NameError); l_bIsReturn = true; break; } if (l_AccountsResult.Count != 1) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerAccountLogin(...) - l_AccountsResult.Count != 1 error!"); AccountLogin_ReplyRej(netState, LoginReason.LoginFailed); l_bIsReturn = true; break; } Accounts l_Accounts = l_AccountsResult[0] as Accounts; if (l_Accounts == null) { Debug.WriteLine("LoginServerPacketHandlers.LoginServerAccountLogin(...) - l_Accounts == null error!"); AccountLogin_ReplyRej(netState, LoginReason.LoginFailed); l_bIsReturn = true; break; } if (l_Accounts.Banned == true || l_Accounts.GMLevel < 0) { AccountLogin_ReplyRej(netState, LoginReason.Blocked); l_bIsReturn = true; break; } if (l_Accounts.Locked == true) { AccountLogin_ReplyRej(netState, LoginReason.InUse); for (int iIndex = 0; iIndex < Program.CharServerList.Count; iIndex++) { Program.CharServerList[iIndex].SendToCharServer((int)l_Accounts.AccountsGuid); } l_bIsReturn = true; break; } if (l_Accounts.Password != l_strPassword) { AccountLogin_ReplyRej(netState, LoginReason.PasswordError); l_bIsReturn = true; break; } l_ExtendData.AccountsGuid = l_Accounts.AccountsGuid; l_ExtendData.IsLoggedIn = true; } while (false); } l_Session.Commit(); if (l_bIsReturn == true) { return; } AccountLoginEventArgs l_EventArgs = new AccountLoginEventArgs(netState, l_strUsername, l_strPassword); EventSink.InvokeAccountLogin(l_EventArgs); if (l_EventArgs.Accepted) { AccountLogin_ReplyAck(netState); } else { AccountLogin_ReplyRej(netState, l_EventArgs.RejectReason); } }