| Class | DBus::Bus |
| In: |
lib/dbus.rb
|
| Parent: | Object |
Represents a connection to a DBus daemon
| TYPE_SESSION | = | BUS_SESSION |
| TYPE_SYSTEM | = | BUS_SYSTEM |
| TYPE_ACTIVATION | = | BUS_ACTIVATION |
# File lib/dbus.rb, line 21
21: def initialize(bus_type=TYPE_SESSION, glib_mainloop=true)
22: @connection = DBus::Binding::bus_get(bus_type)
23: @connection.add_filter(method(:signal_dispatcher))
24: @rules = {}
25: @connection.setup_with_g_main if glib_mainloop
26: end
Activates the given service on this bus
# File lib/dbus.rb, line 91
91: def activate_service(service_name, flags=0)
92: DBus::Binding::bus_activate_service(@connection, service_name, flags)
93: end
Add a handler handler_proc for the match rule resulting from passing the parameters to Bus#build_signal_rule. Multiple handlers can be installed for the same signal.
# File lib/dbus.rb, line 39
39: def add_signal_receiver(handler_proc, signal_name=nil, interface=nil, service=nil, path=nil)
40: rule = build_signal_rule(signal_name, interface, service, path)
41: @rules[rule] ||= []
42: @rules[rule] << handler_proc unless @rules[rule].include?(handler_proc)
43: DBus::Binding::bus_add_match(@connection, rule)
44: end
Generate a match rule for a signal with the specified arguments. If any of the method arguments is nil, its processing (below) is skipped.
# File lib/dbus.rb, line 67
67: def build_signal_rule(signal_name, interface, service, path)
68: rule = "type='signal'"
69: if interface
70: rule += ",interface='%s'" % interface
71: end
72: if service
73: if service[0,1] != ":" && service != "org.freedesktop.DBus"
74: bus_service = get_service("org.freedesktop.DBus")
75: bus_object = bus_service.get_object("/org/freedesktop/DBus",
76: "org.freedesktop.DBus")
77: service = bus_object.GetServiceOwner(service)
78: end
79: rule += ",sender='%s'" % service
80: end
81: if path
82: rule += ",path='%s'" % path
83: end
84: if signal_name
85: rule += ",member='%s'" % signal_name
86: end
87: rule
88: end
Returns the base service name of this bus
# File lib/dbus.rb, line 101
101: def get_base_service
102: DBus::Binding::bus_get_base_service(@connection)
103: end
# File lib/dbus.rb, line 32
32: def get_service(name="org.freedesktop.Broadcast")
33: RemoteService.new(self, name)
34: end
Returns the UNIX user ID for the given service
# File lib/dbus.rb, line 96
96: def get_unix_user(service_name)
97: DBus::Binding::bus_get_unix_user(@connection, service_name)
98: end
Remove the handler handler_proc for a match rule previously added using Bus#add_signal_receiver.
# File lib/dbus.rb, line 48
48: def remove_signal_receiver(handler_proc, signal_name=nil, interface=nil, service=nil, path=nil)
49: rule = build_signal_rule(signal_name, interface, service, path)
50: return nil unless @rules.has_key?(rule)
51: @rules[rule].remove(handler_proc)
52: DBus::Binding::bus_remove_match(@conn, rule)
53: end