class A4Tools::WebSocketTransporter
Attributes
ready[R]
Public Class Methods
new(uri)
click to toggle source
Calls superclass method
A4Tools::Transporter::new
# File lib/acres_client.rb, line 85 def initialize(uri) super() @uri = uri @queue = [] @ready = false @mutex = Mutex.new @condition = ConditionVariable.new end
Public Instance Methods
connect(timeout=5)
click to toggle source
# File lib/acres_client.rb, line 94 def connect(timeout=5) return true if @ready start_socket @mutex.synchronize { @condition.wait(@mutex, timeout) } @ready end
disconnect()
click to toggle source
# File lib/acres_client.rb, line 101 def disconnect @client.kill unless @client.nil? @client = nil @ws = nil true end
empty_queue()
click to toggle source
# File lib/acres_client.rb, line 140 def empty_queue @queue.each { |msg| send_message(msg) } @queue = [] end
send_message(msg)
click to toggle source
# File lib/acres_client.rb, line 145 def send_message(msg) unless @ready then @queue.push msg return end signal(:sent, msg) @ws.send(msg) end
start_socket()
click to toggle source
# File lib/acres_client.rb, line 108 def start_socket @client = Thread.new do EM.run do @ws = Faye::WebSocket::Client.new(@uri.to_s) @ws.on :open do |event| @mutex.synchronize do @ready = true @condition.signal end signal(:connect) empty_queue end @ws.on :error do |event| @mutex.synchronize { @condition.signal } end @ws.on :message do |event| signal(:message, event.data) end @ws.on :close do |event| @ready = false @ws = nil signal(:disconnect) end end end end