class EventMachine::Synchrony::Multi
def add(name, conn)
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
def check_progress(fiber)
def check_progress(fiber) if finished? succeed # continue processing fiber.resume(self) if fiber.alive? && fiber != Fiber.current end end
def finished?
def finished? (@responses[:callback].size + @responses[:errback].size) == @requests.size end
def initialize
def initialize @requests = {} @responses = {:callback => {}, :errback => {}} end
def perform
def perform Fiber.yield unless finished? end