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