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); } }
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); }