Module: EISCP::Receiver::Discovery
- Included in:
- EISCP::Receiver
- Defined in:
- lib/eiscp/receiver/discovery.rb
Overview
This module discovers receivers on the local LAN.
Constant Summary collapse
- ONKYO_MAGIC =
ISCP Magic Packet for Autodiscovery
Message.new(command: 'ECN', value: 'QSTN', terminator: "\r\n", unit_type: 'x').to_eiscp
Instance Method Summary collapse
-
#discover(discovery_port = Receiver::ONKYO_PORT) ⇒ Object
Returns an array of discovered Receiver objects.
-
#ecn_string_to_ecn_array(ecn_string) ⇒ Object
Populates Receiver attributes with info from ECNQSTN response.
Instance Method Details
#discover(discovery_port = Receiver::ONKYO_PORT) ⇒ Object
Returns an array of discovered Receiver objects.
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/eiscp/receiver/discovery.rb', line 30 def discover(discovery_port = Receiver::ONKYO_PORT) sock = UDPSocket.new sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true) sock.send(ONKYO_MAGIC, 0, '<broadcast>', discovery_port) data = [] loop do msg, addr = sock.recvfrom_nonblock(1024) data << Receiver.new(addr[2], ecn_string_to_ecn_array(msg)) rescue IO::WaitReadable io = IO.select([sock], nil, nil, 0.5) if io.nil? return data else retry end end end |
#ecn_string_to_ecn_array(ecn_string) ⇒ Object
Populates Receiver attributes with info from ECNQSTN response.
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/eiscp/receiver/discovery.rb', line 17 def ecn_string_to_ecn_array(ecn_string) hash = {} = Parser.parse(ecn_string) array = .value.split('/') hash[:model] = array.shift hash[:port] = array.shift.to_i hash[:area] = array.shift hash[:mac_address] = array.shift hash end |