コード例 #1
0
        private async Task AcceptPeers()
        {
#if !NET47
            //There is a bug in .NET Core 2.0 that blocks async method which returns void.
            await Task.Yield();
#endif
            while (!cancellationTokenSource.IsCancellationRequested)
            {
                Socket socket;
                try
                {
                    socket = await listener.AcceptSocketAsync();
                }
                catch (ObjectDisposedException)
                {
                    break;
                }
                catch (SocketException)
                {
                    continue;
                }
                TcpRemoteNode remoteNode = new TcpRemoteNode(this, socket);
                OnConnected(remoteNode);
            }
        }
コード例 #2
0
        public async Task ConnectToPeerAsync(IPEndPoint remoteEndpoint)
        {
            TR.Enter();
            if (remoteEndpoint.Port == Port && LocalAddresses.Contains(remoteEndpoint.Address.MapToIPv6()))
            {
                TR.Exit(); return;
            }
            lock (unconnectedPeers)
            {
                unconnectedPeers.Remove(remoteEndpoint);
            }
            lock (connectedPeers)
            {
                if (connectedPeers.Any(p => remoteEndpoint.Equals(p.ListenerEndpoint)))
                {
                    TR.Exit();
                    return;
                }
            }
            TR.Log();
            TcpRemoteNode remoteNode = new TcpRemoteNode(this, remoteEndpoint);

            TR.Log();
            IndentContext ic        = TR.SaveContextAndShuffle();
            bool          connected = await remoteNode.ConnectAsync();

            TR.RestoreContext(ic);
            if (connected)
            {
                TR.Log();
                OnConnected(remoteNode);
            }
            TR.Exit();
        }
コード例 #3
0
        private async void AcceptPeers()
        {
#if !NET47
            //There is a bug in .NET Core 2.0 that blocks async method which returns void.
            await Task.Yield();
#endif
            TR.Enter();
            while (!cancellationTokenSource.IsCancellationRequested)
            {
                Socket        socket;
                IndentContext ic = TR.SaveContextAndShuffle();
                try
                {
                    socket = await listener.AcceptSocketAsync();
                }
                catch (ObjectDisposedException)
                {
                    break;
                }
                catch (SocketException)
                {
                    continue;
                }
                finally
                {
                    TR.RestoreContext(ic);
                }
                TcpRemoteNode remoteNode = new TcpRemoteNode(this, socket);
                OnConnected(remoteNode);
            }
            TR.Exit();
        }
コード例 #4
0
ファイル: LocalNode.cs プロジェクト: xhnice/neo
        public async Task ConnectToPeerAsync(IPEndPoint remoteEndpoint)
        {
            if (remoteEndpoint.Port == Port && LocalAddresses.Contains(remoteEndpoint.Address))
            {
                return;
            }
            lock (unconnectedPeers)
            {
                unconnectedPeers.Remove(remoteEndpoint);
            }
            lock (connectedPeers)
            {
                if (connectedPeers.Any(p => remoteEndpoint.Equals(p.ListenerEndpoint)))
                {
                    return;
                }
            }
            // 新建远程节点对象
            TcpRemoteNode remoteNode = new TcpRemoteNode(this, remoteEndpoint);

            if (await remoteNode.ConnectAsync())
            {
                OnConnected(remoteNode);
            }
        }
コード例 #5
0
ファイル: LocalNode.cs プロジェクト: zale1989/neo
 private async void AcceptPeersAsync()
 {
     while (disposed == 0)
     {
         Socket socket;
         try
         {
             socket = await listener.AcceptSocketAsync();
         }
         catch (ObjectDisposedException)
         {
             break;
         }
         catch (SocketException)
         {
             break;
         }
         TcpRemoteNode remoteNode = new TcpRemoteNode(this, socket);
         OnConnected(remoteNode);
     }
 }
コード例 #6
0
 private async void AcceptPeers()
 {
     while (!cancellationTokenSource.IsCancellationRequested)
     {
         Socket socket;
         try
         {
             socket = await listener.AcceptSocketAsync();
         }
         catch (ObjectDisposedException)
         {
             break;
         }
         catch (SocketException)
         {
             continue;
         }
         TcpRemoteNode remoteNode = new TcpRemoteNode(this, socket);
         OnConnected(remoteNode);
     }
 }