Class: Coolio::Loop
- Inherits:
-
Object
- Object
- Coolio::Loop
- Defined in:
- lib/cool.io/loop.rb,
ext/cool.io/loop.c,
ext/cool.io/iowatcher.c,
ext/cool.io/stat_watcher.c,
ext/cool.io/timer_watcher.c
Class Method Summary collapse
-
.default ⇒ Object
Retrieve the default event loop for the current thread.
Instance Method Summary collapse
-
#attach(watcher) ⇒ Object
Attach a watcher to the loop.
-
#has_active_watchers? ⇒ Boolean
Does the loop have any active watchers?.
-
#initialize(options = {}) ⇒ Loop
constructor
Create a new Coolio::Loop.
-
#run(timeout = nil) ⇒ Object
Run the event loop and dispatch events back to Ruby.
- #run_nonblock ⇒ Object
- #run_once ⇒ Object
-
#stop ⇒ Object
Stop the event loop if it’s running.
-
#watchers ⇒ Object
All watchers attached to the current loop.
Constructor Details
#initialize(options = {}) ⇒ Loop
Create a new Coolio::Loop
Options:
:skip_environment (boolean)
Ignore the $LIBEV_FLAGS environment variable
:fork_check (boolean)
Enable autodetection of forks
:backend
Choose the default backend, one (or many in an array) of:
:select (most platforms)
:poll (most platforms except Windows)
:epoll (Linux)
:kqueue (BSD/Mac OS X)
:port (Solaris 10)
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/cool.io/loop.rb', line 41 def initialize( = {}) @watchers = {} @active_watchers = 0 flags = 0 .each do |option, value| case option when :skip_environment flags |= EVFLAG_NOEV if value when :fork_check flags |= EVFLAG_FORKCHECK if value when :backend value = [value] unless value.is_a? Array value.each do |backend| case backend when :select then flags |= EVBACKEND_SELECT when :poll then flags |= EVBACKEND_POLL when :epoll then flags |= EVBACKEND_EPOLL when :kqueue then flags |= EVBACKEND_KQUEUE when :port then flags |= EVBACKEND_PORT else raise ArgumentError, "no such backend: #{backend}" end end else raise ArgumentError, "no such option: #{option}" end end @loop = ev_loop_new(flags) end |
Class Method Details
.default ⇒ Object
Retrieve the default event loop for the current thread
19 20 21 |
# File 'lib/cool.io/loop.rb', line 19 def self.default Thread.current._coolio_loop end |
Instance Method Details
#attach(watcher) ⇒ Object
Attach a watcher to the loop
73 74 75 |
# File 'lib/cool.io/loop.rb', line 73 def attach(watcher) watcher.attach self end |
#has_active_watchers? ⇒ Boolean
Does the loop have any active watchers?
100 101 102 |
# File 'lib/cool.io/loop.rb', line 100 def has_active_watchers? @active_watchers > 0 end |
#run(timeout = nil) ⇒ Object
Run the event loop and dispatch events back to Ruby. If there are no watchers associated with the event loop it will return immediately. Otherwise, run will continue blocking and making event callbacks to watchers until all watchers associated with the loop have been disabled or detached. The loop may be explicitly stopped by calling the stop method on the loop object.
83 84 85 86 87 88 89 90 91 |
# File 'lib/cool.io/loop.rb', line 83 def run(timeout = nil) raise RuntimeError, "no watchers for this loop" if @watchers.empty? @running = true while @running and not @active_watchers.zero? run_once(timeout) end @running = false end |
#run_nonblock ⇒ Object
22 |
# File 'ext/cool.io/loop.c', line 22 static VALUE Coolio_Loop_run_nonblock(VALUE self); |
#run_once ⇒ Object
21 |
# File 'ext/cool.io/loop.c', line 21
static VALUE Coolio_Loop_run_once(int argc, VALUE *argv, VALUE self);
|
#stop ⇒ Object
Stop the event loop if it’s running
94 95 96 97 |
# File 'lib/cool.io/loop.rb', line 94 def stop raise RuntimeError, "loop not running" unless @running @running = false end |
#watchers ⇒ Object
All watchers attached to the current loop
105 106 107 |
# File 'lib/cool.io/loop.rb', line 105 def watchers @watchers.keys end |