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