class IO::Event::Debug::Selector
Enforces the selector interface and delegates operations to a wrapped selector instance.
def close
def close if @selector.nil? raise "Selector already closed!" end @selector.close @selector = nil end
def initialize(selector)
def initialize(selector) @selector = selector @readable = {} @writable = {} @priority = {} unless Fiber.current == selector.loop raise "Selector must be initialized on event loop fiber!" end end
def io_read(fiber, io, buffer, length)
def io_read(fiber, io, buffer, length) @selector.io_read(fiber, io, buffer, length) end
def io_wait(fiber, io, events)
def io_wait(fiber, io, events) register_readable(fiber, io, events) end
def io_write(fiber, io, buffer, length)
def io_write(fiber, io, buffer, length) @selector.io_write(fiber, io, buffer, length) end
def process_wait(*arguments)
def process_wait(*arguments) @selector.process_wait(*arguments) end
def push(fiber)
def push(fiber) @selector.push(fiber) end
def raise(fiber, *arguments)
def raise(fiber, *arguments) @selector.raise(fiber, *arguments) end
def ready?
def ready? @selector.ready? end
def register_priority(fiber, io, events)
def register_priority(fiber, io, events) if (events & IO::PRIORITY) > 0 if @priority.key?(io) raise "Cannot wait for #{io} to become priority from multiple fibers." end begin @priority[io] = fiber @selector.io_wait(fiber, io, events) ensure @priority.delete(io) end else @selector.io_wait(fiber, io, events) end end
def register_readable(fiber, io, events)
def register_readable(fiber, io, events) if (events & IO::READABLE) > 0 if @readable.key?(io) raise "Cannot wait for #{io} to become readable from multiple fibers." end begin @readable[io] = fiber register_writable(fiber, io, events) ensure @readable.delete(io) end else register_writable(fiber, io, events) end end
def register_writable(fiber, io, events)
def register_writable(fiber, io, events) if (events & IO::WRITABLE) > 0 if @writable.key?(io) raise "Cannot wait for #{io} to become writable from multiple fibers." end begin @writable[io] = fiber register_priority(fiber, io, events) ensure @writable.delete(io) end else register_priority(fiber, io, events) end end
def resume(*arguments)
def resume(*arguments) @selector.resume(*arguments) end
def select(duration = nil)
def select(duration = nil) unless Fiber.current == @selector.loop raise "Selector must be run on event loop fiber!" end @selector.select(duration) end
def transfer(fiber, *arguments)
def transfer(fiber, *arguments) @selector.transfer(fiber, *arguments) end
def transfer(*arguments)
def transfer(*arguments) @selector.transfer(*arguments) end
def wakeup
def wakeup @selector.wakeup end
def yield
def yield @selector.yield end