/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ContextMenuOpening(object sender, System.ComponentModel.CancelEventArgs e) { PeerSettingsRecord Record = MainListView.SelectedItems.Count > 0 ? MainListView.SelectedItems[0].Tag as PeerSettingsRecord : null; availabilityToolStripMenuItem.Enabled = false; ContextMenuPeer = null; if (Record != null) { foreach (Peer Peer in Program.NetClient.AllPeers) { if (Peer.Connection.IsReadyForData && Peer.Connection.Address != null && Peer.Connection.Address.Address.ToString() == Record.Address) { availabilityToolStripMenuItem.Enabled = true; ContextMenuPeer = Peer; } } } }
/// <summary> /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ListUpdateTimerTick(object sender, EventArgs e) { Peer[] AllPeers = Program.NetClient.AllPeers; List <string> ConnectedAddresses = new List <string>(); foreach (Peer Peer in AllPeers) { if (Peer.Connection.IsReadyForData && Peer.Connection.Address != null) { ConnectedAddresses.Add(Peer.Connection.Address.Address.ToString()); } } foreach (PeerSettingsRecord Peer in Program.Settings.PeerRecords) { ListViewItem Item = null; foreach (ListViewItem SubItem in MainListView.Items) { PeerSettingsRecord ItemPeer = SubItem.Tag as PeerSettingsRecord; if (ItemPeer == Peer) { Item = SubItem; break; } } if (Item == null) { Item = new ListViewItem(new string[14]); Item.Tag = Peer; Item.ImageIndex = 0; Item.StateImageIndex = 0; MainListView.Items.Add(Item); MainListView.Sort(); } Peer RealPeer = null; foreach (Peer CheckPeer in AllPeers) { if (CheckPeer.Connection.IsReadyForData && CheckPeer.Connection.Address != null && CheckPeer.Connection.Address.Address.ToString() == Peer.Address) { RealPeer = CheckPeer; break; } } Item.Group = ConnectedAddresses.Contains(Peer.Address) ? MainListView.Groups[0] : MainListView.Groups[1]; //Item.SubItems[0].Text = HostnameCache.GetHostname(Peer.Address); Item.SubItems[0].Text = Peer.Username; Item.SubItems[1].Text = Peer.MachineName; Item.SubItems[2].Text = StringUtils.FormatAsTransferRate((long)Peer.AverageRateIn); Item.SubItems[3].Text = StringUtils.FormatAsTransferRate((long)Peer.PeakRateIn); Item.SubItems[4].Text = StringUtils.FormatAsTransferRate((long)Peer.AverageRateOut); Item.SubItems[5].Text = StringUtils.FormatAsTransferRate((long)Peer.PeakRateOut); Item.SubItems[6].Text = StringUtils.FormatAsSize(Peer.TotalIn); Item.SubItems[7].Text = StringUtils.FormatAsSize(Peer.TotalOut); Item.SubItems[8].Text = Peer.LastSeen.ToString("dd/MM/yyyy HH:mm"); Item.SubItems[9].Text = StringUtils.FormatAsSize((long)Peer.TargetInFlightData); Item.SubItems[10].Text = StringUtils.FormatAsSize((long)Peer.CurrentInFlightData); Item.SubItems[11].Text = string.Format("R:{0} S:{1} M:{2} Q:{3:0.0}", (RealPeer != null ? RealPeer.ActiveBlockDownloads.Count : 0).ToString(), (RealPeer != null ? RealPeer.BlockRequestQueue.Count : 0).ToString(), (RealPeer != null ? RealPeer.MaxInFlightRequests : 0).ToString(), (RealPeer != null ? RealPeer.QueueDepthMs : 0).ToString()); Item.SubItems[12].Text = string.Format("{0} ms", Peer.Ping); Item.SubItems[13].Text = string.Format("{0} ms", Peer.BestPing); } }