Esempio n. 1
0
        private static void AddPeer(Peer peer)
        {
            Random rand = new Random();

            peer.ConnectToPeer(1300);

            if (!Peers.TryAdd(rand.Next(), peer))
            {
                peer.Disconnect();
            }
        }
Esempio n. 2
0
        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();
            }
        }
Esempio n. 3
0
        /// <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}!");
            }
        }
Esempio n. 4
0
        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}!");
                    }
                }
            }
        }
Esempio n. 5
0
 protected virtual bool AddPeer(PeerState peer)
 {
     return(Peers.TryAdd(peer.Id, peer));
 }