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);
        }
        private void OnPeerEvent(object sender, PeerEventArgs eventArgs)
        {
            var eventData  = eventArgs.EventData;
            var senderPeer = (SocketPeer)sender;

            if (!Peers.Contains(senderPeer))
            {
                return;
            }

            if (eventData.EventType == PeerEventType.ConnectionClosed)
            {
                DisconnectPeer(senderPeer);
            }
        }
Exemple #3
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);
        }
        public void ProcessPeerMessage(NetworkMessage msg)
        {
            TPeer peer = (TPeer)msg.conn;

            // ignore messages from unregistered users
            if (!Peers.Contains(peer))
            {
                return;
            }

            // set the sender peer
            SenderPeer = peer;

            // set the next signal target to this peer by default (reply-style)
            SetTargetPeer(peer);

            // process the message
            ProcessMessage(msg);
        }