Example #1
0
        public void ProcessMessage(RequestPeerAddressesMessage message, IRemoteNode remoteNode)
        {
            PeerAddressesPayloadMessage response = new PeerAddressesPayloadMessage();

            response.NotConnectedIpEndPoints = _peerTracker.GetNotConnectedEndPoints(Int32.MaxValue, 0);
            response.ConnectedIpEndPoints    = _peerTracker.GetConnectedEndPoints(Int32.MaxValue, 0);
            remoteNode.QueueMessage(response);
        }
Example #2
0
        public void ProcessHandShake(BinaryReader reader, IRemoteNode remoteNode)
        {
            IntroductionMessage messageToSend = new IntroductionMessage();

            messageToSend.BlockHeight = 100;
            messageToSend.Version     = new Version(_clientSettings.Version);
            messageToSend.Port        = _clientSettings.BlockChainNetSettings.ListenPortOverride ?? _clientSettings.ListenPort;

            remoteNode.QueueMessage(messageToSend);

            MessageType msgType = (MessageType)reader.ReadByte();

            if (msgType != MessageType.Introduction)
            {
                throw new ProtocolViolationException("Invalid version response.");
            }

            IntroductionMessage receivedMessage = new IntroductionMessage();

            receivedMessage.ReadFromStream(reader);

            if (receivedMessage.Version != new Version(_clientSettings.Version))
            {
                throw new ProtocolViolationException("Version mismatch.");
            }

            remoteNode.ListenerEndpoint = new IPEndPoint(remoteNode.RemoteEndPoint.Address, receivedMessage.Port);

            if (_peerTracker.TryAddNewConnectedPeer(remoteNode))
            {
                Console.WriteLine("Successfully Received Introduction Request!");
                Console.WriteLine("Starting Protocol With New Peer.");

                Task.Run(() => remoteNode.ExecuteProtocolLoop());
            }
        }