class DBus::Service
This represents a remote service. It should not be instantiated directly Use {Bus#service}
Attributes
The bus the service is running on.
The service name.
The service root (FIXME).
Public Class Methods
Create a new service with a given name on a given bus.
# File lib/dbus/bus.rb 30 def initialize(name, bus) 31 @name = BusName.new(name) 32 @bus = bus 33 @root = Node.new("/") 34 end
Public Instance Methods
Retrieves an object at the given path. @return [ProxyObject]
# File lib/dbus/bus.rb 52 def [](path) 53 object(path, api: ApiOptions::A1) 54 end
Determine whether the service name already exists.
# File lib/dbus/bus.rb 37 def exists? 38 bus.proxy.ListNames[0].member?(@name) 39 end
Export an object obj (an DBus::Object
subclass instance).
# File lib/dbus/bus.rb 71 def export(obj) 72 obj.service = self 73 get_node(obj.path, true).object = obj 74 end
Get the object node corresponding to the given path. if create is true, the the nodes in the path are created if they do not already exist.
# File lib/dbus/bus.rb 94 def get_node(path, create = false) 95 n = @root 96 path.sub(%r{^/}, "").split("/").each do |elem| 97 if !(n[elem]) 98 return nil if !create 99 n[elem] = Node.new(elem) 100 end 101 n = n[elem] 102 end 103 if n.nil? 104 DBus.logger.debug "Warning, unknown object #{path}" 105 end 106 n 107 end
Perform an introspection on all the objects on the service (starting recursively from the root).
# File lib/dbus/bus.rb 43 def introspect 44 raise NotImplementedError if block_given? 45 46 rec_introspect(@root, "/") 47 self 48 end
Retrieves an object at the given path whose methods always return an array. @return [ProxyObject]
# File lib/dbus/bus.rb 59 def object(path, api: ApiOptions::A0) 60 node = get_node(path, _create = true) 61 if node.object.nil? || node.object.api != api 62 node.object = ProxyObject.new( 63 @bus, @name, path, 64 api: api 65 ) 66 end 67 node.object 68 end
Undo exporting an object obj. Raises ArgumentError if it is not a DBus::Object
. Returns the object, or false if obj was not exported.
# File lib/dbus/bus.rb 79 def unexport(obj) 80 raise ArgumentError, "DBus::Service#unexport() expects a DBus::Object argument" unless obj.is_a?(DBus::Object) 81 return false unless obj.path 82 last_path_separator_idx = obj.path.rindex("/") 83 parent_path = obj.path[1..last_path_separator_idx - 1] 84 node_name = obj.path[last_path_separator_idx + 1..-1] 85 86 parent_node = get_node(parent_path, false) 87 return false unless parent_node 88 obj.service = nil 89 parent_node.delete(node_name).object 90 end
Private Instance Methods
Perform a recursive retrospection on the given current node on the given path.
# File lib/dbus/bus.rb 117 def rec_introspect(node, path) 118 xml = bus.introspect_data(@name, path) 119 intfs, subnodes = IntrospectXMLParser.new(xml).parse 120 subnodes.each do |nodename| 121 subnode = node[nodename] = Node.new(nodename) 122 subpath = if path == "/" 123 "/" + nodename 124 else 125 path + "/" + nodename 126 end 127 rec_introspect(subnode, subpath) 128 end 129 return if intfs.empty? 130 node.object = ProxyObjectFactory.new(xml, @bus, @name, path).build 131 end