class Gemini::WebsocketConnection::WSClient
Public Class Methods
new(options = {})
click to toggle source
# File lib/gemini/websocket_connection.rb, line 158 def initialize(options = {}) # set some defaults @url = options[:url] || 'wss://api.gemini.com/ws' @reconnect = options[:reconnect] || false @reconnect_after = options[:reconnect_after] || 30 @stop = false end
Public Instance Methods
alive?()
click to toggle source
# File lib/gemini/websocket_connection.rb, line 200 def alive? @ws && @ws.ready_state == Faye::WebSocket::API::OPEN end
connect!()
click to toggle source
# File lib/gemini/websocket_connection.rb, line 184 def connect! @stop = false @ws = Faye::WebSocket::Client.new(@url) @ws.onopen = method(:ws_opened) @ws.onmessage = method(:ws_receive) @ws.onclose = method(:ws_closed) @ws.onerror = method(:ws_error) end
on(msg, &blk)
click to toggle source
# File lib/gemini/websocket_connection.rb, line 166 def on(msg, &blk) ivar = "@#{msg}_cb" instance_variable_set(ivar.to_sym, blk) end
run!()
click to toggle source
# File lib/gemini/websocket_connection.rb, line 171 def run! if EventMachine.reactor_running? connect! else EM.run { connect! } end end
send(msg)
click to toggle source
# File lib/gemini/websocket_connection.rb, line 193 def send(msg) raise ConnectionClosed if stopped? connect! unless alive? msg = msg.is_a?(Hash) ? msg.to_json : msg @ws.send(msg) end
stop!()
click to toggle source
# File lib/gemini/websocket_connection.rb, line 179 def stop! @stop = true @ws.close end
stopped?()
click to toggle source
# File lib/gemini/websocket_connection.rb, line 204 def stopped? @stop end
Private Instance Methods
ws_closed(event)
click to toggle source
# File lib/gemini/websocket_connection.rb, line 218 def ws_closed(event) if @stop EM.stop elsif @reconnect EM.add_timer(@reconnect_after){ connect! } end end
ws_error(event)
click to toggle source
# File lib/gemini/websocket_connection.rb, line 226 def ws_error(event) raise WebsocketError, event.message end
ws_opened(event)
click to toggle source
# File lib/gemini/websocket_connection.rb, line 210 def ws_opened(event) @open_cb.call(event) if @open_cb end
ws_receive(event)
click to toggle source
# File lib/gemini/websocket_connection.rb, line 214 def ws_receive(event) @message_cb.call(event.data) if @message_cb end