class Bitstamp::Websocket

Constants

BASE_URI
CLIENT_ID
PARAMS
PROTOCOL

Public Class Methods

new(logger) click to toggle source
# File lib/bitstamp/websocket.rb, line 19
def initialize(logger)
  @logger = logger
end

Public Instance Methods

listen(channel, event, block) click to toggle source
# File lib/bitstamp/websocket.rb, line 23
def listen(channel, event, block)
  EM.run do
    setup_socket(channel, event, block)
  end
end
setup_socket(channel, event, block) click to toggle source
# File lib/bitstamp/websocket.rb, line 29
def setup_socket(channel, event, block)
  websocket = Faye::WebSocket::Client.new(BASE_URI + PARAMS)

  websocket.on(:open) do |message|
    subscribe(websocket, channel)
    @logger.debug("Opened connection and subscribed to '#{channel}'")
  end

  websocket.on(:message) do |message|
    parsed_message = handle_body(message.data)

    case parsed_message.fetch('event')
    when event
      data = handle_body(parsed_message.fetch('data'))
      block.call(data)
    when 'pusher:connection_established'
      @logger.debug('Connection established')
    when 'pusher_internal:subscription_succeeded'
      @logger.debug("Subscription to channel '#{channel}' succeeded")
    else
      @logger.debug("Received unhandled message: #{message.data.to_s}")
    end
  end

  websocket.on(:close) do |message|
    @logger.debug("Closed websocket connection")
  end
end
subscribe(websocket, channel) click to toggle source
# File lib/bitstamp/websocket.rb, line 58
def subscribe(websocket, channel)
  subscribe_message = {
    event: 'pusher:subscribe',
    data:  { channel: channel }
  }

  websocket.send(subscribe_message.to_json)
end