Class: Celluloid::IO::Reactor::Monitor
- Inherits:
-
Object
- Object
- Celluloid::IO::Reactor::Monitor
- Defined in:
- lib/ringleader/celluloid_fix.rb
Instance Method Summary collapse
-
#initialize(selector, io) ⇒ Monitor
constructor
A new instance of Monitor.
- #interests_symbol ⇒ Object
- #reregister ⇒ Object
- #resume ⇒ Object
- #resume_for(interest) ⇒ Object
- #wait(interest) ⇒ Object
- #wait_readable ⇒ Object
- #wait_writable ⇒ Object
Constructor Details
#initialize(selector, io) ⇒ Monitor
Returns a new instance of Monitor.
67 68 69 70 71 |
# File 'lib/ringleader/celluloid_fix.rb', line 67 def initialize(selector, io) @selector = selector @io = io @interests = {} end |
Instance Method Details
#interests_symbol ⇒ Object
100 101 102 103 104 105 106 107 108 109 |
# File 'lib/ringleader/celluloid_fix.rb', line 100 def interests_symbol case @interests.keys when [:r] :r when [:w] :w when [:r, :w] :rw end end |
#reregister ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/ringleader/celluloid_fix.rb', line 88 def reregister if @monitor @monitor.close @monitor = nil end if interests_symbol @monitor = @selector.register(@io, interests_symbol) @monitor.value = self end end |
#resume ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/ringleader/celluloid_fix.rb', line 111 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) ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/ringleader/celluloid_fix.rb', line 125 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) ⇒ Object
81 82 83 84 85 86 |
# File 'lib/ringleader/celluloid_fix.rb', line 81 def wait(interest) raise "Already waiting for #{interest.inspect}" if @interests.include?(interest) @interests[interest] = Task.current reregister Task.suspend :iowait end |
#wait_readable ⇒ Object
73 74 75 |
# File 'lib/ringleader/celluloid_fix.rb', line 73 def wait_readable wait :r end |
#wait_writable ⇒ Object
77 78 79 |
# File 'lib/ringleader/celluloid_fix.rb', line 77 def wait_writable wait :w end |