Attach a watcher to the loop
# File lib/rev/loop.rb, line 81 def attach(watcher) watcher.attach self end
Does the loop have any active watchers?
# File lib/rev/loop.rb, line 108 def has_active_watchers? @active_watchers > 0 end
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.
# File lib/rev/loop.rb, line 91 def run raise RuntimeError, "no watchers for this loop" if @watchers.empty? @running = true while @running and not @active_watchers.zero? run_once end @running = false end
Stop the event loop if it’s running
# File lib/rev/loop.rb, line 102 def stop raise RuntimeError, "loop not running" unless @running @running = false end
All watchers attached to the current loop
# File lib/rev/loop.rb, line 113 def watchers @watchers.keys end
Retrieve the default event loop for the current thread
# File lib/rev/loop.rb, line 21 def self.default Thread.current._rev_loop end
Create a new Rev::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)
# File lib/rev/loop.rb, line 49 def initialize(options = {}) @watchers = {} @active_watchers = 0 flags = 0 options.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