protected override void SendInitData()
 {
     this._lastPingCSTickCounter = 0;
     Logger.Info("CS Connected, try to register me.");
     GSToCS.AskRegiste askRegiste = new GSToCS.AskRegiste();
     askRegiste.Port   = GS.instance.gsConfig.n32GCListenPort;
     askRegiste.Ip     = GS.instance.gsConfig.sGCListenIP;
     askRegiste.Gsid   = GS.instance.gsConfig.n32GSID;
     askRegiste.Usepwd = GS.instance.gsConfig.aszMyUserPwd;
     byte[] data = askRegiste.ToByteArray();
     this.owner.TranMsgToSession(this.id, data, 0, data.Length, ( int )GSToCS.MsgID.EMsgToCsfromGsAskRegiste, 0, 0);
 }
        private ErrorCode MsgHandleInit(byte[] data, int offset, int size, int transID, int msgID, uint gcNetID)
        {
            GSToCS.AskRegiste msg = new GSToCS.AskRegiste();
            msg.MergeFrom(data, offset, size);

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

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

            if (null == csgsInfo)
            {
                this.Close();
                return(ErrorCode.InvalidGSID);
            }

            if (csgsInfo.m_szUserPwd != msg.Usepwd)
            {
                this.Close();
                return(ErrorCode.InvalidUserPwd);
            }

            // 加入GS
            long time = TimeUtils.utcTime;

            csgsInfo.m_eGSNetState     = ServerNetState.Free;
            csgsInfo.m_n32NSID         = this.id;
            this.logicID               = csgsInfo.m_n32GSID;
            csgsInfo.m_tLastConnMilsec = time;
            csgsInfo.m_sListenIP       = msg.Ip;
            csgsInfo.m_n32ListenPort   = msg.Port;
            CS.instance.gsNetInfoList[gsPos].pcGSInfo = csgsInfo;
            csgsInfo.m_n64MsgReceived++;
            csgsInfo.m_n64DataReceived += msg.CalculateSize();
            csgsInfo.m_un32ConnTimes++;
            csgsInfo.m_tLastConnMilsec = time;
            csgsInfo.m_tLastPingMilSec = time;

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