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