class DBus::Main
Main
event loop class.¶ ↑
Class
that takes care of handling message and signal events asynchronously. Note: This is a native implement and therefore does not integrate with a graphical widget set main loop.
Public Class Methods
Source
# File lib/dbus/bus.rb, line 829 def initialize @buses = {} @quitting = false end
Create a new main event loop.
Public Instance Methods
Source
# File lib/dbus/bus.rb, line 835 def <<(bus) @buses[bus.message_queue.socket] = bus end
Add a bus to the list of buses to watch for events.
Source
# File lib/dbus/bus.rb, line 840 def quit @quitting = true end
Quit a running main loop, to be used eg. from a signal handler
Source
# File lib/dbus/bus.rb, line 845 def run # before blocking, empty the buffers # https://bugzilla.novell.com/show_bug.cgi?id=537401 @buses.each_value do |b| while (m = b.message_queue.message_from_buffer_nonblock) b.process(m) end end while !@quitting && !@buses.empty? ready = IO.select(@buses.keys, [], [], 5) # timeout 5 seconds next unless ready # timeout exceeds so continue unless quitting ready.first.each do |socket| b = @buses[socket] begin b.message_queue.buffer_from_socket_nonblock rescue EOFError, SystemCallError @buses.delete socket # this bus died next end while (m = b.message_queue.message_from_buffer_nonblock) b.process(m) end end end end
Run the main loop. This is a blocking call!