class BitcoinNode::P2p::Client::Parser

Public Class Methods

new(command, payload) click to toggle source
# File lib/bitcoin_node/p2p/client.rb, line 70
def initialize(command, payload)
  @command, @payload = command, payload
end

Public Instance Methods

parse() click to toggle source
# File lib/bitcoin_node/p2p/client.rb, line 74
def parse
  callback = Proc.new {}

  if @command == 'version'
    received = BN::Protocol::Version.parse(@payload)
    remote_protocol_version = received.protocol_version.value
    callback = lambda do |client|
      client.version = [remote_protocol_version, client.version].min
      client.send(BN::Protocol::Messages.verack)
    end
  end

  if @command == 'verack'
    BN::Logger.info('Version handshake finished')
    callback = lambda { |client| client.handshaked = true }
  end

  if @command == 'addr'
    BN::Logger.info('Parsing addresses')
    BN::Protocol::Addr.parse(@payload)
  end

  if @command == 'inv'
    BN::Logger.info('Parsing inv')
    p BN::Protocol::Inv.parse(@payload)
  end

  callback
end