示例#1
0
        public async Task <bool> AddPeerAsync(Peer peer)
        {
            Check.Peer(peer);
            if (HasMetadata && Torrent.IsPrivate)
            {
                throw new InvalidOperationException("You cannot add external peers to a private torrent");
            }

            await ClientEngine.MainLoop;

            if (Peers.Contains(peer))
            {
                return(false);
            }

            // Ignore peers in the inactive list
            if (InactivePeerManager.InactivePeerList.Contains(peer.ConnectionUri))
            {
                return(false);
            }

            Peers.AvailablePeers.Add(peer);
            OnPeerFound?.Invoke(this, new PeerAddedEventArgs(this, peer));
            // When we successfully add a peer we try to connect to the next available peer
            return(true);
        }
示例#2
0
        internal int AddPeersCore(Peer peer)
        {
            if (Peers.Contains(peer))
            {
                return(0);
            }

            // Ignore peers in the inactive list
            if (InactivePeerManager.InactivePeerList.Contains(peer.ConnectionUri))
            {
                return(0);
            }

            Peers.AvailablePeers.Add(peer);
            OnPeerFound?.Invoke(this, new PeerAddedEventArgs(this, peer));
            // When we successfully add a peer we try to connect to the next available peer
            return(1);
        }