protected override bool OnRead() { bool bufferReadValid = true; this.ServerPerformanceProblemState = (ServerPerformanceState)GameNetworkMessage.ReadIntFromPacket(CompressionBasic.ServerPerformanceStateCompressionInfo, ref bufferReadValid); return(bufferReadValid); }
internal ServerPerformanceStateReplicationMessage( ServerPerformanceState serverPerformanceProblemState) { this.ServerPerformanceProblemState = serverPerformanceProblemState; }
public override void OnUdpNetworkHandlerTick(float dt) { if (!GameNetwork.IsServer) { return; } float time = MBCommon.GetTime(MBCommon.TimeType.Mission); foreach (NetworkCommunicator networkPeer in GameNetwork.NetworkPeers) { if (networkPeer.IsSynchronized) { while (this._peerData.Count <= networkPeer.Index) { this._peerData.Add(new NetworkStatusReplicationComponent.NetworkStatusData()); } double pingInMilliseconds = networkPeer.RefreshAndGetAveragePingInMilliseconds(); NetworkStatusReplicationComponent.NetworkStatusData networkStatusData = this._peerData[networkPeer.Index]; bool flag = (double)networkStatusData.NextPingForceSendTime <= (double)time; if (flag || (double)networkStatusData.NextPingTrySendTime <= (double)time) { int ping = pingInMilliseconds.Round(); if (flag || networkStatusData.LastSentPingValue != ping) { networkStatusData.LastSentPingValue = ping; networkStatusData.NextPingForceSendTime = time + 10f + MBRandom.RandomFloatRanged(1.5f, 2.5f); GameNetwork.BeginBroadcastModuleEvent(); GameNetwork.WriteMessage((GameNetworkMessage) new PingReplication(networkPeer, ping)); GameNetwork.EndBroadcastModuleEventUnreliable(GameNetwork.EventBroadcastFlags.None); } networkStatusData.NextPingTrySendTime = time + MBRandom.RandomFloatRanged(1.5f, 2.5f); } if (!networkPeer.IsServerPeer && (double)networkStatusData.NextLossTrySendTime <= (double)time) { networkStatusData.NextLossTrySendTime = time + MBRandom.RandomFloatRanged(1.5f, 2.5f); int averageLossPercent = (int)networkPeer.RefreshAndGetAverageLossPercent(); if (networkStatusData.LastSentLossValue != averageLossPercent) { networkStatusData.LastSentLossValue = averageLossPercent; GameNetwork.BeginModuleEventAsServer(networkPeer); GameNetwork.WriteMessage((GameNetworkMessage) new LossReplicationMessage(averageLossPercent)); GameNetwork.EndModuleEventAsServer(); } } } } if ((double)this._nextPerformanceStateTrySendTime > (double)time) { return; } this._nextPerformanceStateTrySendTime = time + MBRandom.RandomFloatRanged(1.5f, 2.5f); ServerPerformanceState performanceState = this.GetServerPerformanceState(); if (performanceState == this._lastSentPerformanceState) { return; } this._lastSentPerformanceState = performanceState; GameNetwork.BeginBroadcastModuleEvent(); GameNetwork.WriteMessage((GameNetworkMessage) new ServerPerformanceStateReplicationMessage(performanceState)); GameNetwork.EndBroadcastModuleEventUnreliable(GameNetwork.EventBroadcastFlags.None); }