class Noam::Message::Marco

Constants

MAX_RESPONSE_LENGTH
WAIT_TIME

Attributes

port[R]

Public Class Methods

new(room_name, lemma_name) click to toggle source
# File lib/noam_lemma/message/marco.rb, line 9
def initialize(room_name, lemma_name)
  @room_name = room_name
  @lemma_name = lemma_name
end

Public Instance Methods

noam_encode() click to toggle source
# File lib/noam_lemma/message/marco.rb, line 29
def noam_encode
  ["marco", @lemma_name, @room_name, Noam::DEVICE_TYPE, Noam::VERSION].to_json
end
start() click to toggle source
# File lib/noam_lemma/message/marco.rb, line 14
def start
  bcast_socket = UDPSocket.new

  bcast_socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)

  loop do
    bcast_socket.send(noam_encode, 0, "255.255.255.255", Noam::BEACON_PORT)
    if message_received?(bcast_socket)
      break
    end
  end

  get_polo_response(bcast_socket)
end

Private Instance Methods

get_polo_response(socket) click to toggle source
# File lib/noam_lemma/message/marco.rb, line 42
def get_polo_response(socket)
  message, sockaddr = socket.recvfrom(MAX_RESPONSE_LENGTH)
  _, _, noam_port = JSON.parse(message)
  _, _, addr, _ = sockaddr

  Polo.new(addr, noam_port)
end
message_received?(socket) click to toggle source
# File lib/noam_lemma/message/marco.rb, line 38
def message_received?(socket)
  IO.select([socket], [], [], WAIT_TIME)
end