Exemplo n.º 1
0
        /// <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;
                }
            }
        }
Exemplo n.º 2
0
        /// <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);
        }