Beispiel #1
0
        internal int Adapt(int value, DataRateUnit unit)
        {
            switch (unit)
            {
            case DataRateUnit.KiBs: return(value * 1024);

            case DataRateUnit.MiBs: return(value * 1024 * 1024);

            case DataRateUnit.GiBs: return(value * 1024 * 1024 * 1024);

            case DataRateUnit.Unlimited: return(0);
            }
            return(0);
        }
Beispiel #2
0
        internal void ServerStateUpdated(long time, int server, ulong bytesTX, ulong bytesRX, uint missingSegmentCount, uint connectionTimeoutCount, uint errorCount)
        {
            if (time != timeCurrent)
            {
                long dt = timeCurrent - timeLast;
                if (dt > 0)
                {
                    long db    = (long)(bytesRXCurrent - bytesRXLast);
                    long alpha = (scale * dt) / (dt + RC);
                    rateRX = alpha * db + (scale - alpha) * db;

                    var rate = 0.01 * (double)rateRX;
                    if ((rate /= 1024) < 512)
                    {
                        ConnectionDataRate     = rate;
                        ConnectionDataRateUnit = DataRateUnit.KiBs;
                    }
                    else if ((rate /= 1024) < 512)
                    {
                        ConnectionDataRate     = rate;
                        ConnectionDataRateUnit = DataRateUnit.MiBs;
                    }
                    else
                    {
                        rate /= 1024;
                        ConnectionDataRate     = rate;
                        ConnectionDataRateUnit = DataRateUnit.GiBs;
                    }
                }

                bytesRXLast    = bytesRXCurrent;
                timeLast       = timeCurrent;
                timeCurrent    = time;
                bytesRXCurrent = 0;
            }


            bytesRXCurrent += bytesRX;
        }