/// <summary> /// </summary> public static void RecordPeerStates() { Peer[] AllPeers = NetClient.AllPeers; foreach (PeerSettingsRecord Record in Settings.PeerRecords) { Record.AverageRateIn = 0; Record.AverageRateOut = 0; Record.TargetInFlightData = 0; Record.CurrentInFlightData = 0; } foreach (Peer Peer in AllPeers) { if (Peer.Connection.Address == null) { continue; } PeerSettingsRecord Record = Settings.GetOrCreatePeerRecord(Peer.Connection.Address.Address.ToString()); if (Peer.Connection.IsConnected) { long TotalIn = Peer.Connection.BandwidthStats.TotalIn; long TotalOut = Peer.Connection.BandwidthStats.TotalOut; Record.Username = Peer.Connection.Handshake != null ? Peer.Connection.Handshake.Username : ""; Record.MachineName = Peer.Connection.Handshake != null ? Peer.Connection.Handshake.MachineName : ""; Record.LastSeen = DateTime.Now; Record.TotalIn += Record.TotalInTracker == -1 ? 0 : TotalIn - Record.TotalInTracker; Record.TotalOut += Record.TotalOutTracker == -1 ? 0 : TotalOut - Record.TotalOutTracker; Record.TotalInTracker = TotalIn; Record.TotalOutTracker = TotalOut; Record.AverageRateIn = Peer.Connection.BandwidthStats.RateIn; // (Record.AverageRateIn * 0.5f) + (Peer.Connection.BandwidthStats.RateIn * 0.5f); Record.AverageRateOut = Peer.Connection.BandwidthStats.RateOut; // (Record.AverageRateOut * 0.5f) + (Peer.Connection.BandwidthStats.RateOut * 0.5f); Record.PeakRateIn = Math.Max(Record.PeakRateIn, Record.AverageRateIn); Record.PeakRateOut = Math.Max(Record.PeakRateOut, Record.AverageRateOut); Record.TargetInFlightData = Peer.GetMaxInFlightData(); Record.CurrentInFlightData = Record.TargetInFlightData - Peer.GetAvailableInFlightData(); Record.Ping = (long)Peer.Connection.Ping.Get(); Record.BestPing = (long)Peer.Connection.BestPing; } } }
/// <summary> /// </summary> /// <param name="Address"></param> /// <returns></returns> public PeerSettingsRecord GetOrCreatePeerRecord(string Address) { foreach (PeerSettingsRecord Record in PeerRecords) { if (Record.Address == Address) { return(Record); } } PeerSettingsRecord NewRecord = new PeerSettingsRecord(); NewRecord.Address = Address; PeerRecords.Add(NewRecord); return(NewRecord); }