Object
D-Bus proxy object class
Class representing a remote object in an external application. Typically, calling a method on an instance of a ProxyObject sends a message over the bus so that the method is executed remotely on the correctponding object.
Retrieves an interface of the proxy object @param [String] intfname @return [ProxyObjectInterface]
# File lib/dbus/proxy_object.rb, line 47 def [](intfname) @interfaces[intfname] end
Maps the given interface name intfname to the given interface _intf. @param [String] intfname @param [ProxyObjectInterface] intf @return [ProxyObjectInterface]
# File lib/dbus/proxy_object.rb, line 55 def []=(intfname, intf) @interfaces[intfname] = intf end
For each non duplicated method name in any interface present on the caller, defines a shortcut method dynamically. This function is automatically called when a {ProxyObject} is introspected.
# File lib/dbus/proxy_object.rb, line 73 def define_shortcut_methods # builds a list of duplicated methods dup_meths, univocal_meths = [],{} @interfaces.each_value do |intf| intf.methods.each_value do |meth| name = meth.name.to_sym # don't overwrite instance methods! if dup_meths.include? name or self.class.instance_methods.include? name next elsif univocal_meths.include? name univocal_meths.delete name dup_meths << name else univocal_meths[name] = intf end end end univocal_meths.each do |name, intf| # creates a shortcut function that forwards each call to the method on # the appropriate intf singleton_class.class_eval do define_method name do |*args, &reply_handler| intf.method(name).call(*args, &reply_handler) end end end end
Returns whether the object has an interface with the given name.
# File lib/dbus/proxy_object.rb, line 102 def has_iface?(name) raise "Cannot call has_iface? if not introspected" if not @introspected @interfaces.member?(name) end
Returns the interfaces of the object.
# File lib/dbus/proxy_object.rb, line 40 def interfaces @interfaces.keys end
Introspects the remote object. Allows you to find and select interfaces on the object.
# File lib/dbus/proxy_object.rb, line 61 def introspect # Synchronous call here. xml = @bus.introspect_data(@destination, @path) ProxyObjectFactory.introspect_into(self, xml) define_shortcut_methods() xml end
Registers a handler, the code block, for a signal with the given name. It uses default_iface which must have been set. @return [void]
# File lib/dbus/proxy_object.rb, line 110 def on_signal(name, &block) if @default_iface and has_iface?(@default_iface) @interfaces[@default_iface].on_signal(name, &block) else # TODO improve raise NoMethodError end end
Generated with the Darkfish Rdoc Generator 2.