lib/iremocon_control.rb in iremocon_control-0.1.2 vs lib/iremocon_control.rb in iremocon_control-0.2.0

- old
+ new

@@ -141,9 +141,45 @@ def vr reply = send_cmd("*vr") reply[0] end + # + # ネットワーク上からiRemoconを見つける + # @param num_iremocon [Integer] ネットワーク上のiRemoconの数 + # @param timeout [Integer] 探索のタイムアウト + # @return [Array<String>] iRemoconのIPアドレス文字列の配列 + # + def self.find(num_iremocon = 1, timeout = 5) + sock = UDPSocket.open() + sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, 1) + sock.bind("0.0.0.0", 0) + + # メッセージをブロードキャスト + sock.send("FIND", 0, "<broadcast>", 1460) + + ips = [] + begin + # タイムアウト設定 + timeout(timeout) do + # タイムアウトまで繰り返す + while true + # 受信待ち + mesg, sockaddr = sock.recvfrom(512) + # iRemoconが見つかったら登録 + ips << sockaddr[3] if sockaddr and sockaddr[3] + # num_iremocon個見つかったら修了 + break if ips.uniq!.size == num_iremocon + end + end + rescue + # タイムアウトまでnum_iremocon個見つからなかった場合 + nil + end + + ips + end + private def send_cmd(*cmds) begin reply = _send_cmd(*cmds)