class EventMachine::Synchrony::Multi

Attributes

requests[R]
responses[R]

Public Class Methods

new() click to toggle source
# File lib/em-synchrony/em-multi.rb, line 8
def initialize
  @requests = {}
  @responses = {:callback => {}, :errback => {}}
end

Public Instance Methods

add(name, conn) click to toggle source
# File lib/em-synchrony/em-multi.rb, line 13
def add(name, conn)
  raise 'Duplicate Multi key' if @requests.key? name

  @requests[name] = conn

  fiber = Fiber.current
  conn.callback { @responses[:callback][name] = conn; check_progress(fiber) }
  conn.errback  { @responses[:errback][name]  = conn; check_progress(fiber) }
end
finished?() click to toggle source
# File lib/em-synchrony/em-multi.rb, line 23
def finished?
  (@responses[:callback].size + @responses[:errback].size) == @requests.size
end
perform() click to toggle source
# File lib/em-synchrony/em-multi.rb, line 27
def perform
  Fiber.yield unless finished?
end

Protected Instance Methods

check_progress(fiber) click to toggle source
# File lib/em-synchrony/em-multi.rb, line 33
def check_progress(fiber)
  if finished?
    succeed

    # continue processing
    fiber.resume(self) if fiber.alive? && fiber != Fiber.current
  end
end