Method: Undead::WebSocketServer#receive
- Defined in:
- lib/undead/web_socket_server.rb
#receive(cmd_id, receive_timeout = nil) ⇒ Object
Block until the next message is available from the Web Socket. Raises Errno::EWOULDBLOCK if timeout is reached.
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/undead/web_socket_server.rb', line 72 def receive(cmd_id, receive_timeout=nil) receive_timeout ||= timeout start = Time.now until @messages.has_key?(cmd_id) raise Errno::EWOULDBLOCK if (Time.now - start) >= receive_timeout if @receive_mutex.try_lock begin IO.select([socket], [], [], receive_timeout) or raise Errno::EWOULDBLOCK data = socket.recv(RECV_SIZE) break if data.empty? driver.parse(data) ensure @receive_mutex.unlock end else sleep(0.05) end end @messages.delete(cmd_id) end |