class DEVp2p::Discovery::Service

Attributes

protocol[R]

Public Class Methods

new(app) click to toggle source
Calls superclass method DEVp2p::Service::new
# File lib/devp2p/discovery/service.rb, line 95
def initialize(app)
  super(app)
  logger.info "Discovery service init"

  @socket = nil
  @protocol = Protocol.new app, self
end

Public Instance Methods

address() click to toggle source
# File lib/devp2p/discovery/service.rb, line 138
def address
  ip = @app.config[:discovery][:listen_host]
  port = @app.config[:discovery][:listen_port]
  Address.new ip, port
end
receive_message(address, message) click to toggle source
# File lib/devp2p/discovery/service.rb, line 144
def receive_message(address, message)
  raise ArgumentError, 'address must be Address' unless address.instance_of?(Address)
  @protocol.receive_message address, message
end
send_message(address, message) click to toggle source
# File lib/devp2p/discovery/service.rb, line 149
def send_message(address, message)
  @sender.async.send_message address, message
end
start() click to toggle source
# File lib/devp2p/discovery/service.rb, line 103
def start
  logger.info 'starting discovery'

  ip = @app.config[:discovery][:listen_host]
  port = @app.config[:discovery][:listen_port]

  logger.info "starting udp listener", port: port, host: ip

  @socket = UDPSocket.new
  @socket.bind ip, port

  @receiver = Receiver.new self, @socket
  @sender = Sender.new self, @socket
  @receiver.async.start
  @sender.async.start

  nodes = @app.config[:discovery][:bootstrap_nodes] || []
  @protocol.bootstrap( nodes.map {|x| Node.from_uri(x) } )
rescue
  puts $!
  puts $!.backtrace[0,10].join("\n")
end
stop() click to toggle source
# File lib/devp2p/discovery/service.rb, line 126
def stop
  logger.info "stopping discovery"

  @socket.close if @socket
  @sender.async.stop if @sender
  @receiver.async.stop if @receiver

  @socket = nil
  @sender = nil
  @receiver = nil
end

Private Instance Methods

logger() click to toggle source
# File lib/devp2p/discovery/service.rb, line 155
def logger
  @logger ||= Logger.new "p2p.discovery"
end