Class: DBus::ProxyObject

Inherits:
Object
  • Object
show all
Defined in:
lib/dbus/introspect.rb

Overview

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.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(bus, dest, path) ⇒ ProxyObject

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



479
480
481
482
483
# File 'lib/dbus/introspect.rb', line 479

def initialize(bus, dest, path)
  @bus, @destination, @path = bus, dest, path
  @interfaces = Hash.new
  @subnodes = Array.new
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args) ⇒ Object (private)

Handles all unkown methods, mostly to route method calls to the default interface.



529
530
531
532
533
534
535
536
537
# File 'lib/dbus/introspect.rb', line 529

def method_missing(name, *args)
  if @default_iface and has_iface?(@default_iface)
    @interfaces[@default_iface].method(name).call(*args)
  else
    dlog "interfaces: #{@interfaces.keys.inspect}"
    dlog "default_iface: #{@default_iface}"
    raise NoMethodError
  end
end

Instance Attribute Details

#busObject (readonly)

The bus the object is reachable via.



473
474
475
# File 'lib/dbus/introspect.rb', line 473

def bus
  @bus
end

#default_ifaceObject

The default interface of the object.



475
476
477
# File 'lib/dbus/introspect.rb', line 475

def default_iface
  @default_iface
end

#destinationObject (readonly)

The (remote) destination of the object.



469
470
471
# File 'lib/dbus/introspect.rb', line 469

def destination
  @destination
end

#introspectedObject

Flag determining whether the object has been introspected.



467
468
469
# File 'lib/dbus/introspect.rb', line 467

def introspected
  @introspected
end

#pathObject (readonly)

The path to the object.



471
472
473
# File 'lib/dbus/introspect.rb', line 471

def path
  @path
end

#subnodesObject

The subnodes of the object in the tree.



465
466
467
# File 'lib/dbus/introspect.rb', line 465

def subnodes
  @subnodes
end

Instance Method Details

#[](intfname) ⇒ Object

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



491
492
493
# File 'lib/dbus/introspect.rb', line 491

def [](intfname)
  @interfaces[intfname]
end

#[]=(intfname, intf) ⇒ Object

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



496
497
498
# File 'lib/dbus/introspect.rb', line 496

def []=(intfname, intf)
  @interfaces[intfname] = intf
end

#has_iface?(name) ⇒ Boolean

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

Returns:

  • (Boolean)


510
511
512
513
# File 'lib/dbus/introspect.rb', line 510

def has_iface?(name)
  raise "Cannot call has_iface? is not introspected" if not @introspected
  @interfaces.member?(name)
end

#interfacesObject

Returns the interfaces of the object.



486
487
488
# File 'lib/dbus/introspect.rb', line 486

def interfaces
  @interfaces.keys
end

#introspectObject

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



502
503
504
505
506
507
# File 'lib/dbus/introspect.rb', line 502

def introspect
  # Synchronous call here.
  xml = @bus.introspect_data(@destination, @path)
  ProxyObjectFactory.introspect_into(self, xml)
  xml
end

#on_signal(name, &block) ⇒ Object

Registers a handler, the code block, for a signal with the given name.



516
517
518
519
520
521
522
# File 'lib/dbus/introspect.rb', line 516

def on_signal(name, &block)
  if @default_iface and has_iface?(@default_iface)
    @interfaces[@default_iface].on_signal(@bus, name, &block)
  else
    raise NoMethodError
  end
end