class Binance::WebSocketBase

Base Websocket

Public Class Methods

new(options = {}) click to toggle source
# File lib/binance/websocket_base.rb, line 9
def initialize(options = {})
  @logger = options[:logger] || Logger.new($stdout)
  @base_url = options[:base_url]
  @ws_connection = nil
end

Public Instance Methods

create_connection(url, cbs) click to toggle source
# File lib/binance/websocket_base.rb, line 15
def create_connection(url, cbs)
  @ws_connection = ::WebSocket::EventMachine::Client.connect(uri: url)
  add_callbacks(cbs)
end
subscribe_to(url, cbs) click to toggle source
# File lib/binance/websocket_base.rb, line 20
def subscribe_to(url, cbs)
  create_connection(url, cbs)
end

Private Instance Methods

add_callbacks(cbs) click to toggle source
# File lib/binance/websocket_base.rb, line 26
def add_callbacks(cbs)
  # check allowed callbacks
  raise ArgumentError, 'Only :onopen, :onmessage, :onclose, :onping, :onpong, :onerror allowed' if %i[onopen onmessage onping onpong onerror onclose].union(cbs.keys).size > 6

  onmessage(cbs)
  onerror(cbs)
  onping(cbs)
  onpong(cbs)
  onclose(cbs)
end
event_callback(cbs, event, data = nil) click to toggle source
# File lib/binance/websocket_base.rb, line 80
def event_callback(cbs, event, data = nil)
  cbs[event].call(data) if cbs.key?(event) && cbs[event].respond_to?(:call)
end
onclose(cbs) click to toggle source
# File lib/binance/websocket_base.rb, line 73
def onclose(cbs)
  @ws_connection.onclose do
    @logger.info('Closed from server')
    event_callback(cbs, :onclose)
  end
end
onerror(cbs) click to toggle source
# File lib/binance/websocket_base.rb, line 50
def onerror(cbs)
  @ws_connection.onerror do |error|
    @logger.error("Error occured: #{error}")
    event_callback(cbs, :onerror, error)
  end
end
onmessage(cbs) click to toggle source
# File lib/binance/websocket_base.rb, line 44
def onmessage(cbs)
  @ws_connection.onmessage do |msg, type|
    cbs[:onmessage].call(msg, type) if cbs.key?(:onmessage) && cbs[:onmessage].respond_to?(:call)
  end
end
onopen(cbs) click to toggle source
# File lib/binance/websocket_base.rb, line 37
def onopen(cbs)
  @ws_connection.onopen do
    @logger.debug('connected to server')
    event_callback(cbs, :onopen)
  end
end
onping(cbs) click to toggle source
# File lib/binance/websocket_base.rb, line 57
def onping(cbs)
  @ws_connection.onping do
    @logger.info('Received ping from server')
    @ws_connection.pong
    @logger.info('Responded pong to server')
    event_callback(cbs, :onping)
  end
end
onpong(cbs) click to toggle source
# File lib/binance/websocket_base.rb, line 66
def onpong(cbs)
  @ws_connection.onpong do
    @logger.info('Received pong from server')
    event_callback(cbs, :onpong)
  end
end