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