Пример #1
0
        public async Task <LoopSession> Start()
        {
            int?port;

            ReceiverService loop =
                new ReceiverBuilder()
                .WithDefinition(new LoopMessages())
                .Build(hooks);

            TcpSocket client = pool.New();
            TcpSocket server = pool.New();

            client.Bind();
            server.Bind(out port);
            server.Listen(1);

            IPEndPoint             endpoint = new IPEndPoint(IPAddress.Loopback, port.Value);
            Task <TcpSocketAccept> accept   = server.Accept();

            client.Connect(endpoint, null);

            PeerHash          peer     = PeerHash.Random();
            TcpSocketAccept   accepted = await accept;
            NetworkConnection receiver = pool.Create(accepted.Connection, NetworkDirection.Incoming, accepted.GetRemote());

            loop.StartProcessing(peer, receiver);
            return(new LoopSession(client, loop));
        }
Пример #2
0
        public void Execute(PeerConnectorContext context)
        {
            NetworkPool       pool       = context.Dependencies.Network;
            NetworkConnection connection = pool.Create(socket, NetworkDirection.Outgoing, endpoint);

            context.Hooks.CallConnectionEstablished(connection);
        }
Пример #3
0
        public async Task <NegotiatorFixturePair> Create()
        {
            int?port;

            TcpSocket host   = pool.New();
            TcpSocket client = pool.New();

            client.Bind();
            host.Bind(out port);
            host.Listen(1);

            Task <TcpSocketAccept>  accept  = host.Accept();
            Task <TcpSocketConnect> connect = client.Connect(port.Value);

            TcpSocketAccept  accepted  = await accept;
            TcpSocketConnect connected = await connect;

            NetworkConnection local  = pool.Create(connected.Socket, NetworkDirection.Outgoing, connected.Endpoint);
            NetworkConnection remote = pool.Create(accepted.Connection, NetworkDirection.Incoming, accepted.GetRemote());

            return(new NegotiatorFixturePair(local, remote));
        }