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