protected override void SendInitData()
        {
            long time = TimeUtils.utcTime;

            CSToGS.AskRegisteRet msg = new CSToGS.AskRegisteRet
            {
                Registe  = 0,
                Curtime  = time,
                Ssbaseid = CS.instance.csKernelCfg.un32SSBaseIdx
            };

            //for ( uint i = 0; i < CS.instance.csKernelCfg.un32MaxSSNum; i++ )
            //{
            //	CSToGS.AskRegisteRet.Types.SSInfo pSsinfo =
            //		new CSToGS.AskRegisteRet.Types.SSInfo
            //		{
            //			Ssid = CS.instance.ssInfoList[i].m_n32SSID,
            //			Ip = CS.instance.ssInfoList[i].m_sListenIP,
            //			Port = CS.instance.ssInfoList[i].m_n32ListenPort,
            //			Netstate = ( int )CS.instance.ssInfoList[i].m_eSSNetState
            //		};
            //}

            byte[] data = msg.ToByteArray();
            this.owner.TranMsgToSession(this.id, data, 0, data.Length, ( int )CSToGS.MsgID.EMsgToGsfromCsAskRegisteRet, 0, 0);
        }
        private ErrorCode MsgInitHandler(byte[] data, int offset, int size, int transID, int msgID, uint gcNetID)
        {
            CSToGS.AskRegisteRet askRegisteRet = new CSToGS.AskRegisteRet();
            askRegisteRet.MergeFrom(data, offset, size);

            if (( int )ErrorCode.Success != askRegisteRet.Registe)
            {
                Logger.Warn($"CS Register Error(ret={askRegisteRet.Registe})!");
                return(( ErrorCode )askRegisteRet.Registe);
            }

            long csMilsec   = askRegisteRet.Curtime;
            long selfMilsec = TimeUtils.utcTime;

            GS.instance.gsStorage.csTimeError = csMilsec - selfMilsec;
            GS.instance.gsStorage.ssBaseIdx   = askRegisteRet.Ssbaseid;

            int ssinfoCount = askRegisteRet.Ssinfo.Count;

            if (0 < ssinfoCount)
            {
                GS.instance.gsStorage.ssConnectNum = 0;
                for (int i = 0; i < ssinfoCount; i++)
                {
                    if (0 == askRegisteRet.Ssinfo[i].Ssid)
                    {
                        continue;
                    }

                    if (GS.instance.gsStorage.ContainsSSInfo(askRegisteRet.Ssinfo[i].Ssid))
                    {
                        continue;
                    }

                    GSSSInfo ssInfo = new GSSSInfo();
                    ssInfo.ssID       = askRegisteRet.Ssinfo[i].Ssid;
                    ssInfo.listenIp   = askRegisteRet.Ssinfo[i].Ip.Replace("\0", string.Empty);
                    ssInfo.listenPort = askRegisteRet.Ssinfo[i].Port;
                    ssInfo.ssNetState = ( ServerNetState )askRegisteRet.Ssinfo[i].Netstate;
                    GS.instance.gsStorage.AddSSInfo(ssInfo.ssID, ssInfo);
                    if (ssInfo.ssNetState == ServerNetState.Closed)
                    {
                        continue;
                    }

                    this.owner.CreateConnector(SessionType.ClientG2S, ssInfo.listenIp, ssInfo.listenPort,
                                               Consts.SOCKET_TYPE, Consts.PROTOCOL_TYPE, 10240, ssInfo.ssID);
                    ++GS.instance.gsStorage.ssConnectNum;
                }
            }
            this.SetInited(true, true);
            return(ErrorCode.Success);
        }
        private ErrorCode OnMsgFromGSAskRegiste(CSGSInfo csgsInfo, byte[] data, int offset, int size)
        {
            GSToCS.AskRegiste sMsg = new GSToCS.AskRegiste();
            sMsg.MergeFrom(data, offset, size);

            // 找到位置号
            int      gsPos    = -1;
            CSGSInfo pcGSInfo = null;

            for (int i = 0; i < CS.instance.csKernelCfg.un32MaxGSNum; i++)
            {
                if (sMsg.Gsid != CS.instance.csKernelCfg.gsInfoList[i].m_n32GSID)
                {
                    continue;
                }
                pcGSInfo = CS.instance.csKernelCfg.gsInfoList[i];
                gsPos    = i;
                break;
            }

            ErrorCode n32Registe = ErrorCode.Success;

            if (null == pcGSInfo)
            {
                n32Registe = ErrorCode.InvalidGSID;
            }

            if (ErrorCode.Success == n32Registe)
            {
                if (pcGSInfo.m_szUserPwd != sMsg.Usepwd)
                {
                    n32Registe = ErrorCode.InvalidUserPwd;
                }
            }

            long tCurUTCMilsec = TimeUtils.utcTime;

            if (ErrorCode.Success == n32Registe)
            {
                pcGSInfo.m_eGSNetState     = ServerNetState.Free;
                pcGSInfo.m_n32NSID         = csgsInfo.m_n32NSID;
                pcGSInfo.m_tLastConnMilsec = tCurUTCMilsec;
                pcGSInfo.m_sListenIP       = sMsg.Ip;
                pcGSInfo.m_n32ListenPort   = sMsg.Port;
                CS.instance.gsNetInfoList[gsPos].pcGSInfo = pcGSInfo;

                pcGSInfo.m_n64MsgReceived++;
                pcGSInfo.m_n64DataReceived += sMsg.CalculateSize();
                pcGSInfo.m_un32ConnTimes++;
                pcGSInfo.m_tLastConnMilsec = tCurUTCMilsec;
                pcGSInfo.m_tLastPingMilSec = tCurUTCMilsec;
                Logger.Info($"Gate Server with GSID {pcGSInfo.m_n32GSID} registed at net session {gsPos}, total conn times {pcGSInfo.m_un32ConnTimes}");
            }

            CSToGS.AskRegisteRet sAskRegisteRet = new CSToGS.AskRegisteRet();
            sAskRegisteRet.Registe = ( int )n32Registe;
            sAskRegisteRet.Curtime = tCurUTCMilsec;
            if (ErrorCode.Success == n32Registe)
            {
                sAskRegisteRet.Ssbaseid = CS.instance.csKernelCfg.un32SSBaseIdx;
                for (int i = 0; i < CS.instance.csKernelCfg.un32MaxSSNum; i++)
                {
                    CSSSInfo csssInfo = CS.instance.csKernelCfg.ssInfoList[i];
                    CSToGS.AskRegisteRet.Types.SSInfo pSSInfo =
                        new CSToGS.AskRegisteRet.Types.SSInfo
                    {
                        Ssid     = csssInfo.m_n32SSID,
                        Ip       = csssInfo.m_sListenIP,
                        Port     = csssInfo.m_n32ListenPort,
                        Netstate = ( int )csssInfo.m_eSSNetState
                    };
                    sAskRegisteRet.Ssinfo.Add(pSSInfo);
                }
            }

            CS.instance.PostMsgToGS(csgsInfo, sAskRegisteRet, ( int )CSToGS.MsgID.EMsgToGsfromCsAskRegisteRet, 0);

            if (ErrorCode.Success != n32Registe)
            {
                CS.instance.netSessionMgr.DisconnectOne(csgsInfo.m_n32NSID);
            }

            return(ErrorCode.Success);
        }