upgrade to Kgio 2.x and Unicorn 3.x
[rainbows.git] / lib / rainbows / fiber / rev / methods.rb
blob4345bdb67b68aff1ee0739df3e5fe88e24a62f4d
1 # -*- encoding: binary -*-
2 # :enddoc:
3 module Rainbows::Fiber::Rev::Methods
4   class Watcher < Rev::IOWatcher
5     def initialize(fio, flag)
6       @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 close
19     @w.detach if defined?(@w) && @w.attached?
20     @r.detach if defined?(@r) && @r.attached?
21     super
22   end
24   def kgio_wait_writable
25     @w = Watcher.new(self, :w) unless defined?(@w)
26     @w.enable unless @w.enabled?
27     Fiber.yield
28     @w.disable
29   end
31   def kgio_wait_readable
32     @r = Watcher.new(self, :r) unless defined?(@r)
33     @r.enable unless @r.enabled?
34     KATO << Fiber.current
35     Fiber.yield
36     @r.disable
37   end
38 end
41   Rainbows::Fiber::IO,
42   Rainbows::Client,
43   # the next two trigger autoload, ugh, oh well...
44   Rainbows::Fiber::IO::Socket,
45   Rainbows::Fiber::IO::Pipe
46 ].each do |klass|
47   klass.__send__(:include, Rainbows::Fiber::Rev::Methods)
48 end