class DBus::ProxyObjectInterface

D-Bus proxy object interface class

A class similar to the normal Interface used as a proxy for remote object interfaces.

Constants

PROPERTY_INTERFACE

Attributes

methods[RW]

The proxied methods contained in the interface.

name[R]

The name of the interface.

object[R]

The proxy object to which this interface belongs.

signals[RW]

The proxied signals contained in the interface.

Public Class Methods

new(object, name) click to toggle source

Creates a new proxy interface for the given proxy object and the given name.

# File lib/dbus/proxy_object_interface.rb, line 27
def initialize(object, name)
  @object = object
  @name = name
  @methods = {}
  @signals = {}
end

Public Instance Methods

[](propname) click to toggle source

Read a property. @param propname [String]

# File lib/dbus/proxy_object_interface.rb, line 116
def [](propname)
  ret = object[PROPERTY_INTERFACE].Get(name, propname)
  # this method always returns the single property
  if @object.api.proxy_method_returns_array
    ret[0]
  else
    ret
  end
end
[]=(propname, value) click to toggle source

Write a property. @param propname [String] @param value [Object]

# File lib/dbus/proxy_object_interface.rb, line 129
def []=(propname, value)
  object[PROPERTY_INTERFACE].Set(name, propname, value)
end
all_properties() click to toggle source

Read all properties at once, as a hash. @return [Hash{String}]

# File lib/dbus/proxy_object_interface.rb, line 135
def all_properties
  ret = object[PROPERTY_INTERFACE].GetAll(name)
  # this method always returns the single property
  if @object.api.proxy_method_returns_array
    ret[0]
  else
    ret
  end
end
define(m) click to toggle source

Defines a signal or method based on the descriptor m.

# File lib/dbus/proxy_object_interface.rb, line 81
def define(m)
  if m.is_a?(Method)
    define_method_from_descriptor(m)
  elsif m.is_a?(Signal)
    define_signal_from_descriptor(m)
  end
end
define_method(methodname, prototype) click to toggle source

Defines a proxied method on the interface.

# File lib/dbus/proxy_object_interface.rb, line 90
def define_method(methodname, prototype)
  m = Method.new(methodname)
  m.from_prototype(prototype)
  define(m)
end
define_method_from_descriptor(m) click to toggle source

Defines a method on the interface from the Method descriptor m.

# File lib/dbus/proxy_object_interface.rb, line 40
def define_method_from_descriptor(m)
  m.params.each do |fpar|
    par = fpar.type
    # This is the signature validity check
    Type::Parser.new(par).parse
  end

  singleton_class.class_eval do
    define_method m.name do |*args, &reply_handler|
      if m.params.size != args.size
        raise ArgumentError, "wrong number of arguments (#{args.size} for #{m.params.size})"
      end

      msg = Message.new(Message::METHOD_CALL)
      msg.path = @object.path
      msg.interface = @name
      msg.destination = @object.destination
      msg.member = m.name
      msg.sender = @object.bus.unique_name
      m.params.each do |fpar|
        par = fpar.type
        msg.add_param(par, args.shift)
      end
      ret = @object.bus.send_sync_or_async(msg, &reply_handler)
      if ret.nil? || @object.api.proxy_method_returns_array
        ret
      else
        m.rets.size == 1 ? ret.first : ret
      end
    end
  end

  @methods[m.name] = m
end
define_signal_from_descriptor(s) click to toggle source

Defines a signal from the descriptor s.

# File lib/dbus/proxy_object_interface.rb, line 76
def define_signal_from_descriptor(s)
  @signals[s.name] = s
end
on_signal(bus = @object.bus, name, &block) click to toggle source

@overload #on_signal(name, &block) @overload #on_signal(bus, name, &block) Registers a handler (code block) for a signal with name arriving over the given bus. If no block is given, the signal is unregistered. Note that specifying bus is discouraged and the option is kept only for backward compatibility. @return [void]

# File lib/dbus/proxy_object_interface.rb, line 103
def on_signal(bus = @object.bus, name, &block)
  mr = DBus::MatchRule.new.from_signal(self, name)
  if block.nil?
    bus.remove_match(mr)
  else
    bus.add_match(mr) { |msg| block.call(*msg.params) }
  end
end
to_str() click to toggle source

Returns the string representation of the interface (the name).

# File lib/dbus/proxy_object_interface.rb, line 35
def to_str
  @name
end