class Citrus::PushSchedulers::Direct

Direct

Public Class Methods

new(app, args) click to toggle source

Initialize the component

@param [Object] app @param [Hash] args

# File lib/citrus/push_schedulers/direct.rb, line 18
def initialize app, args
  @app = app
end

Public Instance Methods

schedule(req_id, route, msg, recvs, args, &block) click to toggle source

Schedule

@param [Integer] req_id @param [String] route @param [Hash] msg @param [Array] recvs @param [Hash] args

# File lib/citrus/push_schedulers/direct.rb, line 29
def schedule req_id, route, msg, recvs, args, &block
  if args[:type] == 'broadcast'
    do_broadcast msg, args[:user_args]
  else
    do_batch_push msg, recvs
  end

  EM.next_tick { block.call } if block_given?
end

Private Instance Methods

do_batch_push(msg, recvs) click to toggle source

Do batch push

@param [Hash] msg @param [Array] recvs

@private

# File lib/citrus/push_schedulers/direct.rb, line 68
def do_batch_push msg, recvs
  session_service = @app.session_service
  recvs.each { |recv|
    session_service.send_message recv, msg
  }
end
do_broadcast(msg, args={}) click to toggle source

Do broadcast

@param [Hash] msg @param [Hash] args

@private

# File lib/citrus/push_schedulers/direct.rb, line 47
def do_broadcast msg, args={}
  channel_service = @app.channel_service
  session_service = @app.session_service

  if args[:binded]
    session_service.sessions.each { |session|
      session_service.send_message_by_uid session.uid, msg
    }
  else
    session_service.sessions.each { |session|
      session_service.send_message session.id, msg
    }
  end
end