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); }
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()); } }