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 314 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 411 def [](propname) self.object[PROPERTY_INTERFACE].Get(self.name, propname)[0] end
Write a property.
# File lib/dbus/introspect.rb, line 416 def []=(propname, value) self.object[PROPERTY_INTERFACE].Set(self.name, propname, value) end
Read all properties at once, as a hash.
# File lib/dbus/introspect.rb, line 421 def all_properties self.object[PROPERTY_INTERFACE].GetAll(self.name)[0] end
FIXME
# File lib/dbus/introspect.rb, line 330 def check_for_eval(s) raise RuntimeError, "invalid internal data '#{s}'" if not s.to_s =~ /^[A-Za-z0-9_]*$/ end
FIXME
# File lib/dbus/introspect.rb, line 335 def check_for_quoted_eval(s) raise RuntimeError, "invalid internal data '#{s}'" if not s.to_s =~ /^[^"]+$/ end
Defines a signal or method based on the descriptor m.
# File lib/dbus/introspect.rb, line 382 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 391 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 340 def define_method_from_descriptor(m) check_for_eval(m.name) check_for_quoted_eval(@name) methdef = "def #{m.name}(" methdef += (0..(m.params.size - 1)).to_a.collect { |n| "arg#{n}" }.push("&reply_handler").join(", ") methdef += %{) 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 } idx = 0 m.params.each do |fpar| par = fpar.type check_for_quoted_eval(par) # This is the signature validity check Type::Parser.new(par).parse methdef += %{ msg.add_param("#{par}", arg#{idx}) } idx += 1 end methdef += " @object.bus.send_sync_or_async(msg, &reply_handler) end " singleton_class.class_eval(methdef) @methods[m.name] = m end
Defines a signal from the descriptor s.
# File lib/dbus/introspect.rb, line 377 def define_signal_from_descriptor(s) @signals[s.name] = s end
Registers a handler (code block) for a signal with name arriving over the given bus. If no block is given, the signal is unregistered.
# File lib/dbus/introspect.rb, line 399 def on_signal(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 singleton class of the interface.
# File lib/dbus/introspect.rb, line 325 def singleton_class (class << self ; self ; end) end
Returns the string representation of the interface (the name).
# File lib/dbus/introspect.rb, line 320 def to_str @name end