class Discovery::Browser

Attributes

response[R]
services[R]

Public Class Methods

new() click to toggle source
# File lib/simple_discovery/browser.rb, line 12
def initialize
  @services = []
  listen
end

Private Instance Methods

broadcast(target = '<broadcast>') click to toggle source
# File lib/simple_discovery/browser.rb, line 19
def broadcast(target = '<broadcast>')
  body = {:port => PORT + 1, :content => nil}

  s = UDPSocket.new
  s.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
  s.send(Marshal.dump(body), 0, target, PORT)
  s.close
end
listen(time_out = 3) click to toggle source
# File lib/simple_discovery/browser.rb, line 28
def listen(time_out = 3)
  s = UDPSocket.new
  s.bind('0.0.0.0', PORT + 1)

  begin
    broadcast
    body, sender = timeout(time_out) { s.recvfrom(1024) }
    server_ip = sender[3]
    data = Marshal.load(body)

    @response = data
    @services = data[:services]
  rescue Timeout::Error
    retry
  end
  s.close
end