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/introspect.rb, line 235 def initialize(object, name) @object, @name = object, name @methods, @signals = Hash.new, Hash.new end
Public Instance Methods
Read a property.
# File lib/dbus/introspect.rb, line 332 def [](propname) self.object[PROPERTY_INTERFACE].Get(self.name, propname)[0] end
Write a property.
# File lib/dbus/introspect.rb, line 337 def []=(propname, value) self.object[PROPERTY_INTERFACE].Set(self.name, propname, value) end
Read all properties at once, as a hash. @return [Hash{String}]
# File lib/dbus/introspect.rb, line 343 def all_properties self.object[PROPERTY_INTERFACE].GetAll(self.name)[0] end
Defines a signal or method based on the descriptor m.
# File lib/dbus/introspect.rb, line 287 def define(m) if m.kind_of?(Method) define_method_from_descriptor(m) elsif m.kind_of?(Signal) define_signal_from_descriptor(m) end end
Defines a proxied method on the interface.
# File lib/dbus/introspect.rb, line 296 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/introspect.rb, line 251 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 @object.bus.send_sync_or_async(msg, &reply_handler) end end @methods[m.name] = m end
Defines a signal from the descriptor s.
# File lib/dbus/introspect.rb, line 282 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/introspect.rb, line 309 def on_signal(*args, &block) # Since we must function under ruby 1.8.7, it isn't possible to define the # function as on_signal(bus = nil, name, &block) bus = case args.size when 1 @object.bus when 2 args.shift else raise ArgumentError, "wrong number of arguments (#{args.size} for 1-2)" end name = args.shift 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 singleton class of the interface.
# File lib/dbus/introspect.rb, line 246 def singleton_class (class << self ; self ; end) end
Returns the string representation of the interface (the name).
# File lib/dbus/introspect.rb, line 241 def to_str @name end