Parent

Celluloid::IO::Reactor::Monitor

Public Class Methods

new(selector, io) click to toggle source
# File lib/celluloid/io/reactor.rb, line 63
def initialize(selector, io)
  @selector = selector
  @io = io
  @interests = {}
end

Public Instance Methods

interests_symbol() click to toggle source
# File lib/celluloid/io/reactor.rb, line 96
def interests_symbol
  case @interests.keys
  when [:r]
    :r
  when [:w]
    :w
  when [:r, :w]
    :rw
  end
end
reregister() click to toggle source
# File lib/celluloid/io/reactor.rb, line 84
def reregister
  if @monitor
    @monitor.close
    @monitor = nil
  end

  if interests_symbol
    @monitor = @selector.register(@io, interests_symbol)
    @monitor.value = self
  end
end
resume() click to toggle source
# File lib/celluloid/io/reactor.rb, line 107
def resume
  raise "No monitor" unless @monitor

  if @monitor.readable?
    resume_for :r
  end

  if @monitor.writable?
    resume_for :w
  end

  reregister
end
resume_for(interest) click to toggle source
# File lib/celluloid/io/reactor.rb, line 121
def resume_for(interest)
  task = @interests.delete(interest)

  if task
    if task.running?
      task.resume
    else
      raise "reactor attempted to resume a dead task"
    end
  end
end
wait(interest) click to toggle source
# File lib/celluloid/io/reactor.rb, line 77
def wait(interest)
  raise "Already waiting for #{interest.inspect}" if @interests.include?(interest)
  @interests[interest] = Task.current
  reregister
  Task.suspend :iowait
end
wait_readable() click to toggle source
# File lib/celluloid/io/reactor.rb, line 69
def wait_readable
  wait :r
end
wait_writable() click to toggle source
# File lib/celluloid/io/reactor.rb, line 73
def wait_writable
  wait :w
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.