Class: Async::Debug::Selector

Inherits:
Object
  • Object
show all
Defined in:
lib/async/debug/selector.rb

Instance Method Summary collapse

Constructor Details

#initialize(selector = NIO::Selector.new) ⇒ Selector

Returns a new instance of Selector.



29
30
31
32
# File 'lib/async/debug/selector.rb', line 29

def initialize(selector = NIO::Selector.new)
  @selector = selector
  @monitors = {}
end

Instance Method Details

#closeObject



68
69
70
71
72
73
74
# File 'lib/async/debug/selector.rb', line 68

def close
  if @monitors.any?
    raise RuntimeError, "Trying to close selector with active monitors: #{@monitors.values.inspect}!"
  end
ensure
  @selector.close
end

#deregister(object) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
# File 'lib/async/debug/selector.rb', line 52

def deregister(object)
  Async.logger.debug(self) {"Deregistering #{object.inspect}."}
  
  unless io = ::IO.try_convert(object)
    raise RuntimeError, "Could not convert #{io} into IO!"
  end
  
  unless @monitors.delete(io.fileno)
    raise RuntimeError, "Trying to remove monitor for #{io.inspect} but it was not registered!"
  end
end

#register(object, interests) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/async/debug/selector.rb', line 34

def register(object, interests)
  Async.logger.debug(self) {"Registering #{object.inspect} for #{interests}."}
  
  unless io = ::IO.try_convert(object)
    raise RuntimeError, "Could not convert #{io} into IO!"
  end
  
  if monitor = @monitors[io.fileno]
    raise RuntimeError, "Trying to register monitor for #{object.inspect} but it was already registered: #{monitor.inspect}!"
  end
  
  monitor = Monitor.new(@selector.register(object, interests), self)
  
  @monitors[io.fileno] = monitor
  
  return monitor
end

#select(*args) ⇒ Object



76
77
78
# File 'lib/async/debug/selector.rb', line 76

def select(*args)
  @selector.select(*args)
end

#wakeupObject



64
65
66
# File 'lib/async/debug/selector.rb', line 64

def wakeup
  @selector.wakeup
end