private static void AddPeer(Peer peer) { Random rand = new Random(); peer.ConnectToPeer(1300); if (!Peers.TryAdd(rand.Next(), peer)) { peer.Disconnect(); } }
private void AddPeer(Peer peer) { peer.BlockRequested += HandleBlockRequested; peer.BlockCancelled += HandleBlockCancelled; peer.BlockReceived += HandleBlockReceived; peer.Disconnected += HandlePeerDisconnected; peer.StateChanged += HandlePeerStateChanged; peer.Connect(); if (!Peers.TryAdd(peer.Key, peer)) { peer.Disconnect(); } }
/// <summary> /// Adds a new peer to the node, all exceptions are thrown back from connection errors. /// </summary> /// <param name="ip"></param> /// <param name="cp"></param> /// <returns></returns> /// <exception cref="SocketException"></exception> public async Task AddPeer(IPEndPoint ip, ChainParams cp = null) { var id = Guid.NewGuid(); var np = new T(); np.OnStop += Node_OnStop; var nc = new BitcoinPeer(cp ?? ChainParams); await nc.ConnectAsync(ip); np.Init(this, nc, id); await np.SendVersion(); if (Peers.TryAdd(id, np)) { OnLog?.Invoke($"New peer added: {np.RemoteEndpoint}!"); } }
private async Task Accept() { #if NET461 var sem_net461 = new SemaphoreSlim(1); #endif while (!Cts.IsCancellationRequested) { #if NET461 Socket ns = null; var saa = new SocketAsyncEventArgs(); saa.Completed += (s, e) => { ns = e.AcceptSocket; sem_net461.Release(); }; if (!Sock.AcceptAsync(saa)) { ns = saa.AcceptSocket; } else { await sem_net461.WaitAsync(); } #else var ns = await Sock.AcceptAsync(); #endif if (ns != null) { var id = Guid.NewGuid(); var np = new T(); np.OnStop += Node_OnStop; np.Init(this, new BitcoinPeer(ChainParams, ns, true), id); if (Peers.TryAdd(id, np)) { OnLog?.Invoke($"New peer added: {np.RemoteEndpoint}!"); } } } }
protected virtual bool AddPeer(PeerState peer) { return(Peers.TryAdd(peer.Id, peer)); }