class EventMachine::Synchrony::Multi
def add(name, conn)
def add(name, conn) fiber = Fiber.current conn.callback { @responses[:callback][name] = conn; check_progress(fiber) } conn.errback { @responses[:errback][name] = conn; check_progress(fiber) } @requests.push(conn) 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