Class: BitcoinNode::P2p::Client::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/bitcoin_node/p2p/client.rb

Instance Method Summary collapse

Constructor Details

#initialize(command, payload) ⇒ Parser

Returns a new instance of Parser.



70
71
72
# File 'lib/bitcoin_node/p2p/client.rb', line 70

def initialize(command, payload)
  @command, @payload = command, payload
end

Instance Method Details

#parseObject



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# 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