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
The proxied methods contained in the interface.
The name of the interface.
The proxy object to which this interface belongs.
The proxied signals contained in the interface.
Public Class Methods
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
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
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
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
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
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
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
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
@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
Returns the string representation of the interface (the name).
# File lib/dbus/proxy_object_interface.rb, line 35 def to_str @name end