Class DBus::ProxyObject
In: lib/dbus/introspect.rb
Parent: 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.

Methods

[]   []=   has_iface?   interfaces   introspect   new   on_signal  

Attributes

bus  [R]  The bus the object is reachable via.
default_iface  [RW]  The default interface of the object, as String.
destination  [R]  The (remote) destination of the object.
introspected  [RW]  Flag determining whether the object has been introspected.
path  [R]  The path to the object.
subnodes  [RW]  The names of direct subnodes of the object in the tree.

Public Class methods

Creates a new proxy object living on the given bus at destination dest on the given path.

[Source]

# File lib/dbus/introspect.rb, line 448
    def initialize(bus, dest, path)
      @bus, @destination, @path = bus, dest, path
      @interfaces = Hash.new
      @subnodes = Array.new
    end

Public Instance methods

Retrieves an interface of the proxy object (ProxyObjectInterface instance).

[Source]

# File lib/dbus/introspect.rb, line 460
    def [](intfname)
      @interfaces[intfname]
    end

Maps the given interface name intfname to the given interface _intf.

[Source]

# File lib/dbus/introspect.rb, line 465
    def []=(intfname, intf)
      @interfaces[intfname] = intf
    end

Returns whether the object has an interface with the given name.

[Source]

# File lib/dbus/introspect.rb, line 479
    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.

[Source]

# File lib/dbus/introspect.rb, line 455
    def interfaces
      @interfaces.keys
    end

Introspects the remote object. Allows you to find and select interfaces on the object.

[Source]

# File lib/dbus/introspect.rb, line 471
    def introspect
      # Synchronous call here.
      xml = @bus.introspect_data(@destination, @path)
      ProxyObjectFactory.introspect_into(self, xml)
      xml
    end

Registers a handler, the code block, for a signal with the given name. It uses default_iface which must have been set.

[Source]

# File lib/dbus/introspect.rb, line 486
    def on_signal(name, &block)
      if @default_iface and has_iface?(@default_iface)
        @interfaces[@default_iface].on_signal(@bus, name, &block)
      else
        # TODO improve
        raise NoMethodError
      end
    end

[Validate]