class Discovery::Announcer
Public Class Methods
new() { |client_ip, data| ... }
click to toggle source
# File lib/simple_discovery/announcer.rb, line 23 def initialize @services = {} @thread = Thread.fork do begin s = UDPSocket.new s.bind('0.0.0.0', PORT) loop do body, sender = s.recvfrom(1024) data = Marshal.load(body) client_ip = sender[3] services = @services.map { |name, service| service[:name] = name; service } yield(client_ip, data) response = { msg: "Discovery/Announcer", host: Socket.gethostname, services: services } reply(client_ip, data[:port], response) unless data[:port].nil? end rescue Interrupt ensure s.close end end end
Public Instance Methods
add_service(name:, description: "", address:, port: )
click to toggle source
# File lib/simple_discovery/announcer.rb, line 8 def add_service(name:, description: "", address:, port: ) @services[name] = { description: "", address: address, port: port} end
join()
click to toggle source
# File lib/simple_discovery/announcer.rb, line 49 def join @thread.join end
remove_service(name:)
click to toggle source
# File lib/simple_discovery/announcer.rb, line 12 def remove_service(name:) @services.delete name end
reply(ip, port, response)
click to toggle source
# File lib/simple_discovery/announcer.rb, line 17 def reply(ip, port, response) s = UDPSocket.new s.send(Marshal.dump(response), 0, ip, port) s.close end