class BinanceAPI::Stream

Constants

BASE_ENDPOINT

Attributes

endpoints[R]
stream_type[R]
ws[R]

Public Class Methods

new(endpoints, on_open: nil, on_close: nil, on_error: nil, on_message: nil) click to toggle source
# File lib/binance_api/stream.rb, line 6
def initialize(endpoints, on_open: nil, on_close: nil, on_error: nil, on_message: nil)
  raise 'on_open can accept a block only' if !on_open.nil? && !on_open.is_a?(Proc)
  raise 'on_close can accept a block only' if !on_close.nil? && !on_close.is_a?(Proc)
  raise 'on_error can accept a block only' if !on_error.nil? && !on_error.is_a?(Proc)
  raise 'on_data can accept a block only' if !on_message.nil? && !on_message.is_a?(Proc)

  @endpoints = Array(endpoints).reject(&:nil?).reject(&:empty?)
  raise 'endpoints cannot be empty' if @endpoints.empty?

  @on_open = on_open
  @on_close = on_close
  @on_error = on_error
  @on_message = on_message
  @stream_type = @endpoints.length > 1 ? :combined : :single
end

Public Instance Methods

close() click to toggle source
# File lib/binance_api/stream.rb, line 31
def close
  ws.close
end
start() click to toggle source
# File lib/binance_api/stream.rb, line 22
def start
  @ws = WebSocket::Client::Simple.connect "#{BASE_ENDPOINT}#{stream_url}"
  ws.on :message, &on_message
  ws.on :open, &on_open
  ws.on :close, &on_close
  ws.on :error, &on_error
  ws
end

Protected Instance Methods

combined_url(stream_names) click to toggle source
# File lib/binance_api/stream.rb, line 47
def combined_url(stream_names)
  "stream?streams=#{stream_names.join('/')}"
end
on_close() click to toggle source
# File lib/binance_api/stream.rb, line 55
def on_close
  @on_close || ->(e) { puts "-- websocket close (#{e.inspect})" }
end
on_error() click to toggle source
# File lib/binance_api/stream.rb, line 59
def on_error
  @on_error || ->(e) { puts "-- error (#{e.inspect})" }
end
on_message() click to toggle source
# File lib/binance_api/stream.rb, line 63
def on_message
  @on_message || ->(msg) { puts ">> #{msg.data}" }
end
on_open() click to toggle source
# File lib/binance_api/stream.rb, line 51
def on_open
  @on_open || ->() { puts "-- websocket open (#{url})" }
end
single_url(stream_name) click to toggle source
# File lib/binance_api/stream.rb, line 43
def single_url(stream_name)
  "ws/#{stream_name}"
end
stream_url() click to toggle source
# File lib/binance_api/stream.rb, line 39
def stream_url
  stream_type == :combined ? combined_url(endpoints) : single_url(endpoints.first)
end