internal void AccountLogin(string accountKey, int opcode, int channelId, string data, int login_server_id, string client_game_version, string client_login_ip, string unique_identifier, string system, string game_channel_id, string nodeName)
        {
            ServerBridgeThread bridgeThread = LobbyServer.Instance.ServerBridgeThread;

            if (bridgeThread.CurActionNum < 30000)
            {
                LogSys.Log(LOG_TYPE.INFO, "Account connected: {0}, Login type: AccountLogin", accountKey);
            }
            /// Normlog
            LogSys.NormLog("serverevent", LobbyConfig.AppKeyStr, LobbyConfig.LogNormVersionStr, system, game_channel_id,
                           unique_identifier, "null", (int)ServerEventCode.VerifyToken, client_game_version);
            //账号登录模式下,首先向Billing服务器验证账号,获取accountId
            //注意这里的回调执行线程是在ServerBridgeThread线程。
            VerifyAccount(accountKey, opcode, channelId, data, (BillingClient.VerifyAccountCB)((a, ret, accountId) =>
            {
                if (ret == true)
                {
                    if (m_KickedUsers.ContainsKey(accountId))
                    {
                        LogSys.Log(LOG_TYPE.WARN, ConsoleColor.Green, "Account verify success but user is a kicked user. account:{0}, id:{1}", accountKey, accountId);

                        JsonMessageAccountLoginResult replyMsg = new JsonMessageAccountLoginResult();
                        replyMsg.m_Account   = accountKey;
                        replyMsg.m_AccountId = "";
                        replyMsg.m_Result    = (int)AccountLoginResult.Error;
                        JsonMessageDispatcher.SendDcoreMessage(nodeName, replyMsg);
                    }
                    else
                    {
                        LogSys.Log(LOG_TYPE.INFO, ConsoleColor.Green, "Account verify success. account:{0}, id:{1}", accountKey, accountId);

                        DataProcessScheduler dataProcess = LobbyServer.Instance.DataProcessScheduler;
                        dataProcess.DispatchAction(dataProcess.DoAccountLogin, accountKey, accountId, login_server_id, client_game_version, client_login_ip, unique_identifier, system, game_channel_id, nodeName);
                    }
                }
                else
                {
                    LogSys.Log(LOG_TYPE.INFO, ConsoleColor.Yellow, "Account verify failed. account:{0}", accountKey);
                    JsonMessageAccountLoginResult replyMsg = new JsonMessageAccountLoginResult();
                    replyMsg.m_Account   = accountKey;
                    replyMsg.m_AccountId = "";
                    replyMsg.m_Result    = (int)AccountLoginResult.Error;
                    JsonMessageDispatcher.SendDcoreMessage(nodeName, replyMsg);
                }
                /// norm log
                LogSys.NormLog("serverevent", LobbyConfig.AppKeyStr, LobbyConfig.LogNormVersionStr, system, game_channel_id,
                               unique_identifier, accountId, (int)ServerEventCode.VerifyResult, client_game_version);
            }));
        }
        internal void DirectLogin(string accountKey, int loginServerId, string nodeName)
        {
            LogSys.Log(LOG_TYPE.INFO, "Account connected: {0}, Login type: DirectLogin", accountKey);
            //直接登录模式下默认accountId与设备标识accountKey相同
            //TO DO:不同设备的设备标识会不会有重复?会不会与Billing返回的accountId重复?
            string accountId = accountKey;

            if (m_KickedUsers.ContainsKey(accountId))
            {
                JsonMessageAccountLoginResult replyMsg = new JsonMessageAccountLoginResult();
                replyMsg.m_Account   = accountKey;
                replyMsg.m_AccountId = "";
                replyMsg.m_Result    = (int)AccountLoginResult.Error;
                JsonMessageDispatcher.SendDcoreMessage(nodeName, replyMsg);
            }
            else
            {
                DataProcessScheduler dataProcess = LobbyServer.Instance.DataProcessScheduler;
                dataProcess.DispatchAction(dataProcess.DoAccountLogin, accountKey, accountId, loginServerId, "", "", "", "", "", nodeName);
            }
        }