Method: Faye::Server#subscribe

Defined in:
lib/faye/protocol/server.rb

#subscribe(message, local = false, &callback) ⇒ Object

MUST contain * clientId

* subscription

MAY contain * ext

* id


246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
# File 'lib/faye/protocol/server.rb', line 246

def subscribe(message, local = false, &callback)
  response     = make_response(message)
  client_id    = message['clientId']
  subscription = [message['subscription']].flatten

  @engine.client_exists(client_id) do |exists|
    response['error'] = Error.client_unknown(client_id) unless exists
    response['error'] = Error.parameter_missing('clientId') if client_id.nil?
    response['error'] = Error.parameter_missing('subscription') if message['subscription'].nil?

    response['subscription'] = message['subscription'] || []

    subscription.each do |channel|
      next if response['error']
      response['error'] = Error.channel_forbidden(channel) unless local or Channel.subscribable?(channel)
      response['error'] = Error.channel_invalid(channel) unless Channel.valid?(channel)

      next if response['error']
      @engine.subscribe(client_id, channel)
    end

    response['successful'] = response['error'].nil?
    callback.call(response)
  end
end