class Tradfri::Service

Constants

INTERNET_PROTOCOL
REGISTRATION_TYPE
SERVICE_TYPE
TRANSPORT_PROTOCOL

Public Class Methods

discover() click to toggle source
# File lib/tradfri/service.rb, line 15
def self.discover
  browse(REGISTRATION_TYPE).map do |reply|
    host, port = resolve(reply, INTERNET_PROTOCOL)
    Service.new(reply.name, host, port)
  end
end

Private Class Methods

browse(registration_type) click to toggle source
# File lib/tradfri/service.rb, line 22
                     def self.browse(registration_type)
  [].tap do |replies|
    DNSSD.browse! registration_type do |reply|
      replies << reply if reply.flags.add?
      break unless reply.flags.more_coming?
    end
  end
end
resolve(browse_reply, protocol) click to toggle source
# File lib/tradfri/service.rb, line 31
                     def self.resolve(browse_reply, protocol)
  DNSSD.resolve! browse_reply do |resolve_reply|
    DNSSD::Service.getaddrinfo(resolve_reply.target, protocol).each do |address_reply|
      return [address_reply.address, resolve_reply.port]
    end

    break unless resolve_reply.flags.more_coming?
  end

  raise "couldn’t resolve #{browse_reply.name}"
end

Public Instance Methods

mac_address() click to toggle source
# File lib/tradfri/service.rb, line 10
def mac_address
  name.slice %r{(?:\h{2}-){5}\h{2}} ||
    raise("couldn’t find MAC address in “#{name}”")
end