public static void onFrapBootInfoSingleNtf(CSPkg msg) { if (HandleFraqBootSingle(msg.stPkgData.stFrapBootSingle)) { MonoSingleton <Reconnection> .GetInstance().UpdateCachedLen(msg); } msg.Release(); }
private void AddCachePkg(CSPkg msg) { DebugHelper.Assert(msg != null); if (!this.ms_bDealRelayCachePkg) { this.ms_cachePkgList.Add(msg); } else { msg.Release(); } }
private void RecordReplay(CSDT_FRAPBOOT_INFO fbid) { CSPkg msg = NetworkModule.CreateDefaultCSPKG(0x40a); SCPKG_FRAPBOOT_SINGLE stFrapBootSingle = msg.stPkgData.stFrapBootSingle; int usedSize = 0; if (fbid.pack(ref stFrapBootSingle.szInfoBuff, stFrapBootSingle.szInfoBuff.Length, ref usedSize, 0) == TdrError.ErrorType.TDR_NO_ERROR) { stFrapBootSingle.wLen = (ushort)usedSize; Singleton <GameReplayModule> .instance.RecordMsg(msg); } msg.Release(); }
public static void onFrapBootInfoMultipleNtf(CSPkg msg) { SCPKG_FRAPBOOTINFO stFrapBootInfo = msg.stPkgData.stFrapBootInfo; for (int i = 0; i < stFrapBootInfo.bSpareNum; i++) { if (HandleFraqBootSingle(stFrapBootInfo.astSpareFrap[i])) { MonoSingleton <Reconnection> .GetInstance().UpdateCachedLen(msg); break; } } msg.Release(); }
public CSPkg RecvPackage() { if (base.connected && (base.connector != null)) { byte[] buffer; int num; if (base.connector.ReadUdpData(out buffer, out num) == ApolloResult.Success) { int usedSize = 0; CSPkg pkg = CSPkg.New(); TdrError.ErrorType type = pkg.unpack(ref buffer, num, ref usedSize, 0); if ((type == TdrError.ErrorType.TDR_NO_ERROR) && (usedSize > 0)) { return(pkg); } object[] objArray1 = new object[] { "UnpackUdpError: BufLen:", num, " TdrError:", type, " nParseSize:", usedSize }; this.ReportException(new UnpackError(string.Concat(objArray1))); } if (base.connector.ReadData(out buffer, out num) == ApolloResult.Success) { int num3 = 0; CSPkg pkg2 = CSPkg.New(); TdrError.ErrorType type2 = pkg2.unpack(ref buffer, num, ref num3, 0); if ((type2 == TdrError.ErrorType.TDR_NO_ERROR) && (num3 > 0)) { int index = 0; while (index < this.confirmSendQueue.Count) { CSPkg pkg3 = this.confirmSendQueue[index]; if ((pkg3.stPkgHead.dwReserve > 0) && (pkg3.stPkgHead.dwReserve == pkg2.stPkgHead.dwMsgID)) { pkg3.Release(); this.confirmSendQueue.RemoveAt(index); } else { index++; } } return(pkg2); } object[] objArray2 = new object[] { "UnpackError: BufLen:", num, " TdrError:", type2, " nParseSize:", num3 }; this.ReportException(new UnpackError(string.Concat(objArray2))); } } return(null); }
private void FlushSendCmd(IFrameCommand inCmd) { IFrameCommand frameCommand = null; IFrameCommand frameCommand2 = null; IFrameCommand frameCommand3 = null; if (inCmd != null) { frameCommand = inCmd; frameCommand2 = this.cmdRedundancyQueue[this.nCmdRedQueueIndex]; frameCommand3 = this.cmdRedundancyQueue[(this.nCmdRedQueueIndex - 1 + 3) % 3]; } else { frameCommand = this.cmdRedundancyQueue[this.nCmdRedQueueIndex]; frameCommand2 = this.cmdRedundancyQueue[(this.nCmdRedQueueIndex - 1 + 3) % 3]; frameCommand3 = this.cmdRedundancyQueue[(this.nCmdRedQueueIndex - 2 + 3) % 3]; } if (frameCommand != null && (inCmd != null || frameCommand.sendCnt < 3)) { CSPkg cSPkg = NetworkModule.CreateDefaultCSPKG(1004u); cSPkg.stPkgData.get_stGamingUperMsg().bNum = 0; this.PackCmd2Msg(ref frameCommand, cSPkg.stPkgData.get_stGamingUperMsg().astUperInfo[(int)cSPkg.stPkgData.get_stGamingUperMsg().bNum]); CSPKG_GAMING_UPERMSG expr_D3 = cSPkg.stPkgData.get_stGamingUperMsg(); expr_D3.bNum += 1; IFrameCommand expr_E2 = frameCommand; expr_E2.sendCnt += 1; if (frameCommand2 != null && frameCommand2.sendCnt < 3 && (ulong)(frameCommand2.frameNum + 10u) > (ulong)((long)Time.frameCount)) { this.PackCmd2Msg(ref frameCommand2, cSPkg.stPkgData.get_stGamingUperMsg().astUperInfo[(int)cSPkg.stPkgData.get_stGamingUperMsg().bNum]); CSPKG_GAMING_UPERMSG expr_14B = cSPkg.stPkgData.get_stGamingUperMsg(); expr_14B.bNum += 1; IFrameCommand expr_15A = frameCommand2; expr_15A.sendCnt += 1; if (frameCommand3 != null && frameCommand3.sendCnt < 3 && (ulong)(frameCommand3.frameNum + 10u) > (ulong)((long)Time.frameCount)) { this.PackCmd2Msg(ref frameCommand3, cSPkg.stPkgData.get_stGamingUperMsg().astUperInfo[(int)cSPkg.stPkgData.get_stGamingUperMsg().bNum]); CSPKG_GAMING_UPERMSG expr_1C3 = cSPkg.stPkgData.get_stGamingUperMsg(); expr_1C3.bNum += 1; IFrameCommand expr_1D2 = frameCommand3; expr_1D2.sendCnt += 1; } } this.SendPackage(cSPkg); cSPkg.Release(); } }
public static void onFrapBootInfoMultipleNtf(CSPkg msg) { SCPKG_FRAPBOOTINFO stFrapBootInfo = msg.stPkgData.get_stFrapBootInfo(); for (int i = 0; i < (int)stFrapBootInfo.bSpareNum; i++) { if (FrameWindow.HandleFraqBootSingle(stFrapBootInfo.astSpareFrap[i])) { MonoSingleton <Reconnection> .GetInstance().UpdateCachedLen(msg); break; } } Singleton <FrameWindow> .GetInstance().SampleFrameSpare((int)stFrapBootInfo.bSpareNum); msg.Release(); }
public static void onRelaySvrPingMsg(CSPkg msg) { if (Singleton <FrameSynchr> .instance.bActive && Singleton <FrameSynchr> .instance.bRunning) { uint num = ((uint)(Time.realtimeSinceStartup * 1000f)) - msg.stPkgData.stRelaySvrPing.dwTime; Singleton <FrameSynchr> .instance.m_pingRecords.Add((uint)Mathf.Clamp((float)num, 0f, 1000f)); FrameSynchr instance = Singleton <FrameSynchr> .instance; instance.m_PingIdx++; Singleton <FrameSynchr> .instance.m_AvePing = ((Singleton <FrameSynchr> .instance.m_AvePing * (Singleton <FrameSynchr> .instance.m_PingIdx - 1)) + num) / Singleton <FrameSynchr> .instance.m_PingIdx; Singleton <FrameSynchr> .instance.m_pingWobble.Add((uint)Mathf.Abs((float)(num - Singleton <FrameSynchr> .instance.m_AvePing))); if (num > Singleton <FrameSynchr> .instance.m_MaxPing) { Singleton <FrameSynchr> .instance.m_MaxPing = num; } if (num < Singleton <FrameSynchr> .instance.m_MinPing) { Singleton <FrameSynchr> .instance.m_MinPing = num; } Singleton <FrameSynchr> .instance.GameSvrPing = (((int)num) + Singleton <FrameSynchr> .instance.GameSvrPing) / 2; if ((Time.time - Singleton <FrameSynchr> .instance.m_PingTimeBegin) > 5f) { Singleton <FrameSynchr> .instance.m_PingTimeBegin = Time.time; if (Singleton <FrameSynchr> .instance.m_LastPing == 0) { Singleton <FrameSynchr> .instance.m_LastPing = num; } if (Math.Abs((long)(Singleton <FrameSynchr> .instance.m_LastPing - num)) > 100L) { FrameSynchr local2 = Singleton <FrameSynchr> .instance; local2.m_Abnormal_PingCount++; Singleton <FrameSynchr> .instance.m_LastPing = num; } } if ((Singleton <FrameSynchr> .instance.m_pingRecords.Count > 100) && (Singleton <FrameSynchr> .instance.GameSvrPing > 300)) { RealPing(); } Singleton <FrameSynchr> .instance.PrepareReportPingToBeacon(Singleton <FrameSynchr> .instance.GameSvrPing); } msg.Release(); }
public CSPkg RecvPackage() { if (this.connected && this.connector != null) { byte[] array; int num; if (this.connector.ReadUdpData(ref array, ref num) == null) { int num2 = 0; CSPkg cSPkg = CSPkg.New(); if (cSPkg.unpack(ref array, num, ref num2, 0u) == null && num2 > 0) { return(cSPkg); } } if (this.connector.ReadData(ref array, ref num) == null) { int num3 = 0; CSPkg cSPkg2 = CSPkg.New(); if (cSPkg2.unpack(ref array, num, ref num3, 0u) == null && num3 > 0) { int i = 0; while (i < this.confirmSendQueue.get_Count()) { CSPkg cSPkg3 = this.confirmSendQueue.get_Item(i); if (cSPkg3.stPkgHead.dwReserve > 0u && cSPkg3.stPkgHead.dwReserve == cSPkg2.stPkgHead.dwMsgID) { cSPkg3.Release(); this.confirmSendQueue.RemoveAt(i); } else { i++; } } return(cSPkg2); } } } return(null); }
public CSPkg RecvPackage() { if (this.connected && this.connector != null) { byte[] array; int size; if (this.connector.ReadUdpData(out array, out size) == ApolloResult.Success) { int num = 0; CSPkg cSPkg = CSPkg.New(); if (cSPkg.unpack(ref array, size, ref num, 0u) == TdrError.ErrorType.TDR_NO_ERROR && num > 0) { return(cSPkg); } } if (this.connector.ReadData(out array, out size) == ApolloResult.Success) { int num2 = 0; CSPkg cSPkg2 = CSPkg.New(); if (cSPkg2.unpack(ref array, size, ref num2, 0u) == TdrError.ErrorType.TDR_NO_ERROR && num2 > 0) { int i = 0; while (i < this.confirmSendQueue.get_Count()) { CSPkg cSPkg3 = this.confirmSendQueue.get_Item(i); if (cSPkg3.stPkgHead.dwReserve > 0u && cSPkg3.stPkgHead.dwReserve == cSPkg2.stPkgHead.dwMsgID) { cSPkg3.Release(); this.confirmSendQueue.RemoveAt(i); } else { i++; } } return(cSPkg2); } } } return(null); }
public CSPkg RecvPackage() { if (base.connected && (base.connector != null)) { byte[] buffer; int num; if (base.connector.ReadUdpData(out buffer, out num) == ApolloResult.Success) { int usedSize = 0; CSPkg pkg = CSPkg.New(); if ((pkg.unpack(ref buffer, num, ref usedSize, 0) == TdrError.ErrorType.TDR_NO_ERROR) && (usedSize > 0)) { return(pkg); } } if (base.connector.ReadData(out buffer, out num) == ApolloResult.Success) { int num3 = 0; CSPkg pkg2 = CSPkg.New(); if ((pkg2.unpack(ref buffer, num, ref num3, 0) == TdrError.ErrorType.TDR_NO_ERROR) && (num3 > 0)) { int index = 0; while (index < this.confirmSendQueue.Count) { CSPkg pkg3 = this.confirmSendQueue[index]; if ((pkg3.stPkgHead.dwReserve > 0) && (pkg3.stPkgHead.dwReserve == pkg2.stPkgHead.dwMsgID)) { pkg3.Release(); this.confirmSendQueue.RemoveAt(index); } else { index++; } } return(pkg2); } } } return(null); }
public static void onRelaySvrPingMsg(CSPkg msg) { if (Singleton <FrameSynchr> .instance.bActive && Singleton <FrameSynchr> .instance.bRunning) { FrameSynchr instance = Singleton <FrameSynchr> .instance; uint curPing = ((uint)(Time.realtimeSinceStartup * 1000f)) - msg.stPkgData.stRelaySvrPing.dwTime; instance.m_pingRecords.Add((uint)Mathf.Clamp((float)curPing, 0f, 1000f)); instance.m_PingIdx++; instance.m_AvePing = ((instance.m_AvePing * (instance.m_PingIdx - 1)) + curPing) / instance.m_PingIdx; instance.m_pingWobble.Add((uint)Mathf.Abs((float)(curPing - instance.m_AvePing))); if (curPing > instance.m_MaxPing) { instance.m_MaxPing = curPing; } if (curPing < instance.m_MinPing) { instance.m_MinPing = curPing; } instance.GameSvrPing = (((int)curPing) + instance.GameSvrPing) / 2; if ((Time.time - instance.m_PingTimeBegin) > 5f) { instance.m_PingTimeBegin = Time.time; if (instance.m_LastPing == 0) { instance.m_LastPing = curPing; } if (Math.Abs((long)(instance.m_LastPing - curPing)) > 100L) { instance.m_Abnormal_PingCount++; instance.m_LastPing = curPing; } } if ((instance.m_pingRecords.Count > 100) && (instance.GameSvrPing > 300)) { RealPing(); } instance.PrepareReportPingToBeacon(instance.GameSvrPing); } msg.Release(); }
public void HandleSending() { if (this.connected) { this.FlushSendCmd(null); for (int i = 0; i < this.confirmSendQueue.get_Count(); i++) { CSPkg cSPkg = this.confirmSendQueue.get_Item(i); if (Singleton <GameLogic> .get_instance().GameRunningTick - cSPkg.stPkgHead.dwSvrPkgSeq > 5000u) { this.SendPackage(cSPkg); cSPkg.stPkgHead.dwSvrPkgSeq = Singleton <GameLogic> .get_instance().GameRunningTick; } } while (this.connected && this.gameMsgSendQueue.get_Count() > 0) { CSPkg cSPkg2 = this.gameMsgSendQueue.get_Item(0); if (!this.SendPackage(cSPkg2)) { break; } if (cSPkg2.stPkgHead.dwReserve > 0u) { cSPkg2.stPkgHead.dwSvrPkgSeq = Singleton <GameLogic> .get_instance().GameRunningTick; this.confirmSendQueue.Add(cSPkg2); } else { cSPkg2.Release(); } this.gameMsgSendQueue.RemoveAt(0); } } else { MonoSingleton <Reconnection> .get_instance().UpdateReconnect(); } }
public static void onRelaySvrPingMsg(CSPkg msg) { uint dwSeqNo = msg.stPkgData.stRelaySvrPing.dwSeqNo; Singleton <DataReportSys> .GetInstance().onRelaySvrPingMsg(dwSeqNo, Singleton <FrameSynchr> .instance.bActive && Singleton <FrameSynchr> .instance.bRunning, msg.stPkgData.stRelaySvrPing.dwTime); if (Singleton <FrameSynchr> .instance.bActive && Singleton <FrameSynchr> .instance.bRunning) { uint num = (uint)(Time.realtimeSinceStartup * 1000f) - msg.stPkgData.stRelaySvrPing.dwTime; Singleton <FrameSynchr> .instance.GameSvrPing = (int)((ulong)num + (ulong)((long)Singleton <FrameSynchr> .instance.GameSvrPing)) / 2; FrameSynchr.SetNetAccIPAndPort(); if (NetworkAccelerator.Inited && !NetworkAccelerator.started && Time.unscaledTime - Singleton <FrameSynchr> .instance.m_NetAccPingTimeBegin > 1f) { Singleton <FrameSynchr> .instance.m_NetAccPingTimeBegin = Time.unscaledTime; NetworkAccelerator.OnNetDelay((int)num); } if (Singleton <DataReportSys> .GetInstance().HeartPingCount > 100 && Singleton <FrameSynchr> .instance.GameSvrPing > 300) { FrameSynchr.RealPing(); } } msg.Release(); }
public void HandleSending() { if (base.connected) { for (int i = 0; i < this.confirmSendQueue.Count; i++) { CSPkg msg = this.confirmSendQueue[i]; if ((Singleton <GameLogic> .instance.GameRunningTick - msg.stPkgHead.dwSvrPkgSeq) > 0x1388) { this.SendPackage(msg); msg.stPkgHead.dwSvrPkgSeq = Singleton <GameLogic> .instance.GameRunningTick; } } while (base.connected && (this.gameMsgSendQueue.Count > 0)) { CSPkg pkg2 = this.gameMsgSendQueue[0]; if (!this.SendPackage(pkg2)) { break; } if (pkg2.stPkgHead.dwReserve > 0) { pkg2.stPkgHead.dwSvrPkgSeq = Singleton <GameLogic> .instance.GameRunningTick; this.confirmSendQueue.Add(pkg2); } else { pkg2.Release(); } this.gameMsgSendQueue.RemoveAt(0); } } else { MonoSingleton <Reconnection> .instance.UpdateReconnect(); } }
public static void onRelaySvrPingMsg(CSPkg msg) { long num = (long)((ulong)msg.stPkgData.get_stRelaySvrPing().dwSeqNo); if (Singleton <FrameSynchr> .get_instance().m_LastReceiveHeartSeq <= 0L) { Singleton <FrameSynchr> .get_instance().m_LastReceiveHeartSeq = num; } else { long num2 = num - Singleton <FrameSynchr> .get_instance().m_LastReceiveHeartSeq; if (num2 >= 2L) { Singleton <FrameSynchr> .get_instance().m_pingLost += num2; } Singleton <FrameSynchr> .get_instance().m_LastReceiveHeartSeq = num; } if (Singleton <FrameSynchr> .get_instance().bActive&& Singleton <FrameSynchr> .get_instance().bRunning) { uint num3 = (uint)(Time.realtimeSinceStartup * 1000f) - msg.stPkgData.get_stRelaySvrPing().dwTime; if (Singleton <FrameSynchr> .GetInstance().m_SendHeartSeq == num + 1L) { Singleton <FrameSynchr> .get_instance().m_pingRecords.Add(num3); Singleton <FrameSynchr> .get_instance().m_PingIdx += 1u; Singleton <FrameSynchr> .get_instance().m_AvePing = (Singleton <FrameSynchr> .get_instance().m_AvePing *(Singleton <FrameSynchr> .get_instance().m_PingIdx - 1u) + num3) / Singleton <FrameSynchr> .get_instance().m_PingIdx; Singleton <FrameSynchr> .get_instance().m_pingWobble.Add((uint)Mathf.Abs(num3 - Singleton <FrameSynchr> .get_instance().m_AvePing)); if (num3 > Singleton <FrameSynchr> .get_instance().m_MaxPing) { Singleton <FrameSynchr> .get_instance().m_MaxPing = num3; } if (num3 < Singleton <FrameSynchr> .get_instance().m_MinPing) { Singleton <FrameSynchr> .get_instance().m_MinPing = num3; } if (num3 > 300u) { Singleton <FrameSynchr> .get_instance().m_ping300Count += 1L; } if (num3 >= 150u && num3 <= 300u) { Singleton <FrameSynchr> .get_instance().m_ping150to300 += 1L; } else if (num3 < 150u) { Singleton <FrameSynchr> .get_instance().m_ping150 += 1L; } } Singleton <FrameSynchr> .get_instance().GameSvrPing = (int)((ulong)num3 + (ulong)((long)Singleton <FrameSynchr> .get_instance().GameSvrPing)) / 2; FrameSynchr.SetNetAccIPAndPort(); if (NetworkAccelerator.enabled && !NetworkAccelerator.started && Time.unscaledTime - Singleton <FrameSynchr> .get_instance().m_NetAccPingTimeBegin > 1f) { Singleton <FrameSynchr> .get_instance().m_NetAccPingTimeBegin = Time.unscaledTime; NetworkAccelerator.OnNetDelay((int)num3); } if (Time.unscaledTime - Singleton <FrameSynchr> .get_instance().m_PingTimeBegin > 5f) { Singleton <FrameSynchr> .get_instance().m_PingTimeBegin = Time.unscaledTime; if (Singleton <FrameSynchr> .get_instance().m_LastPing == 0u) { Singleton <FrameSynchr> .get_instance().m_LastPing = num3; } if (Math.Abs((long)((ulong)(Singleton <FrameSynchr> .get_instance().m_LastPing - num3))) > 100L) { Singleton <FrameSynchr> .get_instance().m_Abnormal_PingCount++; Singleton <FrameSynchr> .get_instance().m_LastPing = num3; } } if (Singleton <FrameSynchr> .get_instance().m_pingRecords.get_Count() > 100 && Singleton <FrameSynchr> .get_instance().GameSvrPing > 300) { FrameSynchr.RealPing(); } } msg.Release(); }
public static void onRelaySvrPingMsg(CSPkg msg) { long dwSeqNo = msg.stPkgData.stRelaySvrPing.dwSeqNo; if (Singleton <FrameSynchr> .instance.m_LastReceiveHeartSeq <= 0L) { Singleton <FrameSynchr> .instance.m_LastReceiveHeartSeq = dwSeqNo; } else { long num2 = dwSeqNo - Singleton <FrameSynchr> .instance.m_LastReceiveHeartSeq; if (num2 >= 2L) { FrameSynchr instance = Singleton <FrameSynchr> .instance; instance.m_pingLost += num2; } Singleton <FrameSynchr> .instance.m_LastReceiveHeartSeq = dwSeqNo; } if (Singleton <FrameSynchr> .instance.bActive && Singleton <FrameSynchr> .instance.bRunning) { uint num3 = ((uint)(Time.realtimeSinceStartup * 1000f)) - msg.stPkgData.stRelaySvrPing.dwTime; Singleton <FrameSynchr> .instance.m_pingRecords.Add((uint)Mathf.Clamp((float)num3, 0f, 1000f)); FrameSynchr local2 = Singleton <FrameSynchr> .instance; local2.m_PingIdx++; Singleton <FrameSynchr> .instance.m_AvePing = ((Singleton <FrameSynchr> .instance.m_AvePing * (Singleton <FrameSynchr> .instance.m_PingIdx - 1)) + num3) / Singleton <FrameSynchr> .instance.m_PingIdx; Singleton <FrameSynchr> .instance.m_pingWobble.Add((uint)Mathf.Abs((float)(num3 - Singleton <FrameSynchr> .instance.m_AvePing))); if (num3 > Singleton <FrameSynchr> .instance.m_MaxPing) { Singleton <FrameSynchr> .instance.m_MaxPing = num3; } if (num3 < Singleton <FrameSynchr> .instance.m_MinPing) { Singleton <FrameSynchr> .instance.m_MinPing = num3; } if (num3 > 300) { FrameSynchr local3 = Singleton <FrameSynchr> .instance; local3.m_ping300Count += 1L; } if ((num3 >= 150) && (num3 <= 300)) { FrameSynchr local4 = Singleton <FrameSynchr> .instance; local4.m_ping150to300 += 1L; } else if (num3 < 150) { FrameSynchr local5 = Singleton <FrameSynchr> .instance; local5.m_ping150 += 1L; } Singleton <FrameSynchr> .instance.GameSvrPing = (((int)num3) + Singleton <FrameSynchr> .instance.GameSvrPing) / 2; SetNetAccIPAndPort(); if ((NetworkAccelerator.enabled && !NetworkAccelerator.started) && ((Time.unscaledTime - Singleton <FrameSynchr> .instance.m_NetAccPingTimeBegin) > 1f)) { Singleton <FrameSynchr> .instance.m_NetAccPingTimeBegin = Time.unscaledTime; NetworkAccelerator.OnNetDelay((int)num3); } if ((Time.unscaledTime - Singleton <FrameSynchr> .instance.m_PingTimeBegin) > 5f) { Singleton <FrameSynchr> .instance.m_PingTimeBegin = Time.unscaledTime; if (Singleton <FrameSynchr> .instance.m_LastPing == 0) { Singleton <FrameSynchr> .instance.m_LastPing = num3; } if (Math.Abs((long)(Singleton <FrameSynchr> .instance.m_LastPing - num3)) > 100L) { FrameSynchr local6 = Singleton <FrameSynchr> .instance; local6.m_Abnormal_PingCount++; Singleton <FrameSynchr> .instance.m_LastPing = num3; } } if ((Singleton <FrameSynchr> .instance.m_pingRecords.Count > 100) && (Singleton <FrameSynchr> .instance.GameSvrPing > 300)) { RealPing(); } Singleton <FrameSynchr> .instance.PrepareReportPingToBeacon(Singleton <FrameSynchr> .instance.GameSvrPing); } msg.Release(); }