fiber_pool: no need for old Fiber::IO
[rainbows.git] / lib / rainbows / fiber / rev / methods.rb
blob64108a9ef5484c3f024aef82537f2c9f8e777253
1 # -*- encoding: binary -*-
2 # :enddoc:
3 module Rainbows::Fiber::Rev::Methods
4   class Watcher < Rev::IOWatcher
5     def initialize(fio, flag)
6       @f = fio.f || Fiber.current
7       super(fio, flag)
8       attach(Rev::Loop.default)
9     end
11     def on_readable
12       @f.resume
13     end
15     alias on_writable on_readable
16   end
18   def initialize(*args)
19     @f = Fiber.current
20     super(*args)
21     @r = @w = false
22   end
24   def close
25     @w.detach if @w
26     @r.detach if @r
27     @r = @w = false
28     super
29   end
31   def wait_writable
32     @w ||= Watcher.new(self, :w)
33     @w.enable unless @w.enabled?
34     Fiber.yield
35     @w.disable
36   end
38   def wait_readable
39     @r ||= Watcher.new(self, :r)
40     @r.enable unless @r.enabled?
41     KATO << @f
42     Fiber.yield
43     @r.disable
44   end
45 end
48   Rainbows::Fiber::IO,
49   Rainbows::Client,
50   # the next two trigger autoload, ugh, oh well...
51   Rainbows::Fiber::IO::Socket,
52   Rainbows::Fiber::IO::Pipe
53 ].each do |klass|
54   klass.__send__(:include, Rainbows::Fiber::Rev::Methods)
55 end