Class: IntesisBox::Discovery
- Inherits:
-
Object
- Object
- IntesisBox::Discovery
- Defined in:
- lib/intesis_box/discovery.rb
Class Method Summary collapse
Instance Method Summary collapse
- #close ⇒ Object
- #discover ⇒ Object
-
#initialize(timeout: nil) ⇒ Discovery
constructor
A new instance of Discovery.
- #pending_discoveries ⇒ Object
Constructor Details
#initialize(timeout: nil) ⇒ Discovery
Returns a new instance of Discovery.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/intesis_box/discovery.rb', line 20 def initialize(timeout: nil) @socket = UDPSocket.new @socket.bind("0.0.0.0", 3310) @socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true) @found = [] receive_lambda = -> do loop do if IO.select([@socket], nil, nil, timeout) @socket.wait_readable msg, _ = @socket.recvfrom(128) next unless msg.start_with?("DISCOVER:") msg = msg[9..-1] model, mac, ip, protocol, version, rssi, name, _, _ = msg.split(",") wmp = { mac: mac, model: model, ip: ip, protocol: protocol, version: version, rssi: rssi, name: name } if block_given? break unless yield wmp else @found << wmp end else break end end end if timeout discover receive_lambda.call else @receive_thread = Thread.new(&receive_lambda) end end |
Class Method Details
.discover(timeout: 1, expected_count: nil, expect: nil) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/intesis_box/discovery.rb', line 6 def discover(timeout: 1, expected_count: nil, expect: nil) wmps = {} discovery = new(timeout: timeout) do |wmp| wmps[wmp[:mac]] = wmp next false if wmps.length == expected_count next false if expect && wmp[:mac] == expect true end wmps ensure discovery&.close end |
Instance Method Details
#close ⇒ Object
55 56 57 58 |
# File 'lib/intesis_box/discovery.rb', line 55 def close @receive_thread&.kill @socket.close end |
#discover ⇒ Object
60 61 62 |
# File 'lib/intesis_box/discovery.rb', line 60 def discover @socket.sendmsg("DISCOVER\r\n", 0, Socket.sockaddr_in(3310, '255.255.255.255')) end |
#pending_discoveries ⇒ Object
64 65 66 67 |
# File 'lib/intesis_box/discovery.rb', line 64 def pending_discoveries result, @found = @found, [] result end |