class FayeTracking::FayeExtension

Constants

MONITORED_CHANNELS

Public Class Methods

new(tracker) click to toggle source
# File lib/faye_tracking/faye_extension.rb, line 9
def initialize(tracker)
  @tracker = tracker
end

Public Instance Methods

incoming(message, callback) click to toggle source
# File lib/faye_tracking/faye_extension.rb, line 13
def incoming(message, callback)
  return callback.call(message) \
    unless MONITORED_CHANNELS.include? message['channel']

  FayeTracking.logger.debug "received incoming message: #{message}"

  unless message['error']
    subs_channel = message['subscription']
    client_id    = message['clientId']
    run_subscribe_callbacks = false

    case message['channel']
    when '/meta/subscribe'
      ext = message['ext']
      if app_client_id = ext['faye_tracking_client_id']
        @tracker.add(subs_channel, client_id, app_client_id)
        run_subscribe_callbacks = true
      else
        error_message = "missing ext['faye_tracking_client_id']"
        FayeTracking.logger.error "error with message: #{error_message}"
        message['error'] = error_message
      end
    when '/meta/unsubscribe'
      # This is not reliable, more robust way to detect unsubscribe event.
      # see: http://faye.jcoglan.com/ruby/monitoring.html
    end
  end

  callback.call(message)

  if run_subscribe_callbacks
    FayeTracking.run_on_subscribe_callbacks(
      client_id, app_client_id, subs_channel
    )
  end
end