예제 #1
0
        public NetConnection()
        {
            TypeFlags            = new BitSet();
            ConnectionParameters = new ConnectionParameters();

            InitialSendSeq = RandomUtil.ReadI();
            RandomUtil.Read(ConnectionParameters.Nonce.Data, Nonce.NonceSize);

            SimulatedLatency    = 0;
            SimulatedPacketLoss = 0.0f;

            LastPacketRecvTime = 0;
            LastUpdateTime     = 0;
            RoundTripTime      = 0.0f;
            SendDelayCredit    = 0;
            ConnectionState    = NetConnectionState.NotConnected;

            NotifyQueueHead = null;
            NotifyQueueTail = null;

            LocalRate = new NetRate
            {
                MaxRecvBandwidth    = DefaultFixedBandwidth,
                MaxSendBandwidth    = DefaultFixedBandwidth,
                MinPacketRecvPeriod = DefaultFixedSendPeriod,
                MinPacketSendPeriod = DefaultFixedSendPeriod
            };

            RemoteRate          = LocalRate;
            ConnectLastSendTime = 0;
            LocalRateChanged    = true;

// ReSharper disable DoNotCallOverridableMethodsInConstructor
            ComputeNegotiatedRate();
// ReSharper restore DoNotCallOverridableMethodsInConstructor

            PingSendCount    = 0;
            LastPingSendTime = 0;

            LastSeqRecvd    = 0;
            HighestAckedSeq = InitialSendSeq;
            LastSendSeq     = InitialSendSeq;
            AckMask         = new uint[MaxAckMaskSize];
            AckMask[0]      = 0;
            LastRecvAckAck  = 0;
            Cwnd            = 2;
            SSThresh        = 30;
            LastSeqRecvdAck = 0;

            PingTimeout    = DefaultPingTimeout;
            PingRetryCount = DefaultPingRetryCount;

            //StringTable = null;
            NumNotifies = 0;

            LastSeqRecvdAtSend = new uint[MaxPacketWindowSize];
        }
예제 #2
0
            public void Update(NetRate c)
            {
                if (prev[0][0] != -1 && prev[0][1] != -1)
                {
                    downloadSpeed_wan = (((c.int_rx < prev[0][0]) ? (c.int_rx + (0xFFFFFFFF - prev[0][0])) : (c.int_rx - prev[0][0])) / 1024.0 / (DateTime.Now.CurrentTimeMillis() - timestamp) * 1000.0);
                    uploadSpeed_wan   = (((c.int_tx < prev[0][1]) ? (c.int_tx + (0xFFFFFFFF - prev[0][1])) : (c.int_tx - prev[0][1])) / 1024.0 / (DateTime.Now.CurrentTimeMillis() - timestamp) * 1000.0);
                }
                prev[0][0] = c.int_rx;
                prev[0][1] = c.int_tx;
                if (downloadSpeed_wan < 1024)
                {
                    downloadSpeed_wan_str = Math.Ceiling(downloadSpeed_wan) + " KB/s";
                }
                else
                {
                    downloadSpeed_wan_str = (downloadSpeed_wan / 1024).ToString("f2") + " MB/s";
                }
                if (uploadSpeed_wan < 1024)
                {
                    uploadSpeed_wan_str = Math.Ceiling(uploadSpeed_wan) + " KB/s";
                }
                else
                {
                    uploadSpeed_wan_str = (uploadSpeed_wan / 1024).ToString("f2") + " MB/s";
                }

                if (prev[1][0] != -1 && prev[1][1] != -1)
                {
                    downloadSpeed_wl2g = (((c.wl2g_rx < prev[1][0]) ? (c.wl2g_rx + (0xFFFFFFFF - prev[1][0])) : (c.wl2g_rx - prev[1][0])) / 1024.0 / (DateTime.Now.CurrentTimeMillis() - timestamp) * 1000.0);
                    uploadSpeed_wl2g   = (((c.wl2g_tx < prev[1][1]) ? (c.wl2g_tx + (0xFFFFFFFF - prev[1][1])) : (c.wl2g_tx - prev[1][1])) / 1024.0 / (DateTime.Now.CurrentTimeMillis() - timestamp) * 1000.0);
                }
                prev[1][0] = c.wl2g_rx;
                prev[1][1] = c.wl2g_tx;
                if (downloadSpeed_wl2g < 1024)
                {
                    downloadSpeed_wl2g_str = Math.Ceiling(downloadSpeed_wl2g) + " KB/s";
                }
                else
                {
                    downloadSpeed_wl2g_str = (downloadSpeed_wl2g / 1024).ToString("f2") + " MB/s";
                }
                if (uploadSpeed_wl2g < 1024)
                {
                    uploadSpeed_wl2g_str = Math.Ceiling(uploadSpeed_wl2g) + " KB/s";
                }
                else
                {
                    uploadSpeed_wl2g_str = (uploadSpeed_wl2g / 1024).ToString("f2") + " MB/s";
                }

                if (prev[2][0] != -1 && prev[2][1] != -1)
                {
                    downloadSpeed_wl5g = (((c.wl5g_rx < prev[2][0]) ? (c.wl5g_rx + (0xFFFFFFFF - prev[2][0])) : (c.wl5g_rx - prev[2][0])) / 1024.0 / (DateTime.Now.CurrentTimeMillis() - timestamp) * 1000.0);
                    uploadSpeed_wl5g   = (((c.wl5g_tx < prev[2][1]) ? (c.wl5g_tx + (0xFFFFFFFF - prev[2][1])) : (c.wl5g_tx - prev[2][1])) / 1024.0 / (DateTime.Now.CurrentTimeMillis() - timestamp) * 1000.0);
                }
                prev[2][0] = c.wl5g_rx;
                prev[2][1] = c.wl5g_tx;
                if (downloadSpeed_wl5g < 1024)
                {
                    downloadSpeed_wl5g_str = Math.Ceiling(downloadSpeed_wl5g) + " KB/s";
                }
                else
                {
                    downloadSpeed_wl5g_str = (downloadSpeed_wl5g / 1024).ToString("f2") + " MB/s";
                }
                if (uploadSpeed_wl5g < 1024)
                {
                    uploadSpeed_wl5g_str = Math.Ceiling(uploadSpeed_wl5g) + " KB/s";
                }
                else
                {
                    uploadSpeed_wl5g_str = (uploadSpeed_wl5g / 1024).ToString("f2") + " MB/s";
                }

                timestamp = DateTime.Now.CurrentTimeMillis();
            }