Example #1
0
        protected override bool OnRead()
        {
            bool bufferReadValid = true;

            this.ServerPerformanceProblemState = (ServerPerformanceState)GameNetworkMessage.ReadIntFromPacket(CompressionBasic.ServerPerformanceStateCompressionInfo, ref bufferReadValid);
            return(bufferReadValid);
        }
Example #2
0
 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);
        }