class SSDP::SsdpListener
Attributes
handler[RW]
port[R]
Public Class Methods
new(port = 1900)
click to toggle source
# File lib/ssdp.rb, line 78 def initialize(port = 1900) @host = '0.0.0.0' @port = port @handler = nil @finishing = false end
Public Instance Methods
finish()
click to toggle source
# File lib/ssdp.rb, line 88 def finish @finishing = true end
run()
click to toggle source
# File lib/ssdp.rb, line 92 def run @finishing = false socket = UDPSocket.new membership = IPAddr.new(MCAST_HOST).hton + IPAddr.new(@host).hton socket.setsockopt(:IPPROTO_IP, :IP_ADD_MEMBERSHIP, membership) socket.setsockopt(:SOL_SOCKET, :SO_REUSEADDR, 1) socket.setsockopt(:SOL_SOCKET, :SO_REUSEPORT, 1) socket.bind(@host, @port) fds = [socket] $logger.debug 'listen...' while @finishing == false do timeout = 1 if ios = select(fds, [], [], timeout) data, addr = socket.recvfrom(4096) ssdp_header = SsdpHeader.new HttpHeader.read(data.chomp) if @handler responses = @handler.on_ssdp_header(ssdp_header) if responses != nil responses.each do |response| socket.send response.to_s, 0, addr[2], addr[1] end end end end end socket.close end
start()
click to toggle source
# File lib/ssdp.rb, line 120 def start @run_thread = Thread.new { self.run } end
stop()
click to toggle source
# File lib/ssdp.rb, line 124 def stop @finishing = true @run_thread.join end