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]; }
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(); }