class Tapyrus::Network::PeerDiscovery

Attributes

configuration[R]
logger[R]

Public Class Methods

new(configuration) click to toggle source
# File lib/tapyrus/network/peer_discovery.rb, line 6
def initialize(configuration)
  @logger = Tapyrus::Logger.create(:debug)
  @configuration = configuration
end

Public Instance Methods

peers() click to toggle source

get peer addresses, from DNS seeds.

# File lib/tapyrus/network/peer_discovery.rb, line 12
def peers
  # TODO add find from previous connected peer at first.
  (find_from_dns_seeds + seeds).uniq
end

Private Instance Methods

dns_seeds() click to toggle source
# File lib/tapyrus/network/peer_discovery.rb, line 19
def dns_seeds
  Tapyrus.chain_params.dns_seeds || []
end
find_from_dns_seeds() click to toggle source
# File lib/tapyrus/network/peer_discovery.rb, line 27
def find_from_dns_seeds
  logger.debug 'discover peer address from DNS seeds.'
  dns_seeds.map do |seed|
    begin
      Socket.getaddrinfo(seed, Tapyrus.chain_params.default_port).map { |a| a[2] }.uniq
    rescue SocketError => e
      logger.error "SocketError occurred when load DNS seed: #{seed}, error: #{e.message}"
      nil
    end
  end.flatten.compact
end
seeds() click to toggle source
# File lib/tapyrus/network/peer_discovery.rb, line 23
def seeds
  [*configuration.conf[:connect]]
end