GetMaxFlowMode() private method

private GetMaxFlowMode ( ) : int
return int
示例#1
0
        //from user thread, our thread, or recv?
        private void SendPacket(NetPacket packet)
        {
            switch (packet.Property)
            {
            case PacketProperty.Reliable:
                DebugWrite("[RS]Packet reliable");
                _reliableUnorderedChannel.AddToQueue(packet);
                break;

            case PacketProperty.Sequenced:
                DebugWrite("[RS]Packet sequenced");
                _sequencedChannel.AddToQueue(packet);
                break;

            case PacketProperty.ReliableOrdered:
                DebugWrite("[RS]Packet reliable ordered");
                _reliableOrderedChannel.AddToQueue(packet);
                break;

            case PacketProperty.None:
                DebugWrite("[RS]Packet simple");
                if (_peerListener.GetMaxFlowMode() == -1)
                {
                    SendRawData(packet.RawData);
                    Recycle(packet);
                }
                else
                {
                    _simpleChannel.AddToQueue(packet);
                }
                break;

            case PacketProperty.MtuCheck:
                if (!SendRawData(packet.RawData))
                {
                    _finishMtu = true;
                }
                Recycle(packet);
                break;

            case PacketProperty.AckReliable:
            case PacketProperty.AckReliableOrdered:
            case PacketProperty.Ping:
            case PacketProperty.Pong:
            case PacketProperty.Disconnect:
            case PacketProperty.MtuOk:
                SendRawData(packet.RawData);
                Recycle(packet);
                break;

            default:
                throw new Exception("Unknown packet property: " + packet.Property);
            }
        }
示例#2
0
        private void UpdateRoundTripTime(int roundTripTime)
        {
            //Calc average round trip time
            _rtt += roundTripTime;
            _rttCount++;
            _avgRtt = _rtt / _rttCount;

            //flowmode 0 = fastest
            //flowmode max = lowest

            if (_avgRtt < _peerListener.GetStartRtt(_currentFlowMode - 1))
            {
                if (_currentFlowMode <= 0)
                {
                    //Already maxed
                    return;
                }

                _goodRttCount++;
                if (_goodRttCount > NetConstants.FlowIncreaseThreshold)
                {
                    _goodRttCount = 0;
                    _currentFlowMode--;

                    DebugWrite("[PA]Increased flow speed, RTT: {0}, PPS: {1}", _avgRtt, _peerListener.GetPacketsPerSecond(_currentFlowMode));
                }
            }
            else if (_avgRtt > _peerListener.GetStartRtt(_currentFlowMode))
            {
                _goodRttCount = 0;
                if (_currentFlowMode < _peerListener.GetMaxFlowMode())
                {
                    _currentFlowMode++;
                    DebugWrite("[PA]Decreased flow speed, RTT: {0}, PPS: {1}", _avgRtt, _peerListener.GetPacketsPerSecond(_currentFlowMode));
                }
            }
        }