Class: DBus::ProxyObjectInterface
- Inherits:
-
Object
- Object
- DBus::ProxyObjectInterface
- Defined in:
- lib/dbus/proxy_object_interface.rb
Overview
D-Bus proxy object interface class
A class similar to the normal Interface used as a proxy for remote object interfaces.
Constant Summary collapse
- PROPERTY_INTERFACE =
"org.freedesktop.DBus.Properties".freeze
Instance Attribute Summary collapse
-
#methods ⇒ Object
The proxied methods contained in the interface.
-
#name ⇒ Object
readonly
The name of the interface.
-
#object ⇒ Object
readonly
The proxy object to which this interface belongs.
-
#signals ⇒ Object
The proxied signals contained in the interface.
Instance Method Summary collapse
-
#[](propname) ⇒ Object
Read a property.
-
#[]=(propname, value) ⇒ Object
Write a property.
-
#all_properties ⇒ Hash{String}
Read all properties at once, as a hash.
-
#define(m) ⇒ Object
Defines a signal or method based on the descriptor m.
-
#define_method(methodname, prototype) ⇒ Object
Defines a proxied method on the interface.
-
#define_method_from_descriptor(m) ⇒ Object
Defines a method on the interface from the Method descriptor m.
-
#define_signal_from_descriptor(s) ⇒ Object
Defines a signal from the descriptor s.
-
#initialize(object, name) ⇒ ProxyObjectInterface
constructor
Creates a new proxy interface for the given proxy object and the given name.
-
#on_signal(bus = @object.bus, name, &block) ⇒ void
Registers a handler (code block) for a signal with name arriving over the given bus.
-
#to_str ⇒ Object
Returns the string representation of the interface (the name).
Constructor Details
#initialize(object, name) ⇒ ProxyObjectInterface
Creates a new proxy interface for the given proxy object and the given name.
27 28 29 30 31 32 |
# File 'lib/dbus/proxy_object_interface.rb', line 27 def initialize(object, name) @object = object @name = name @methods = {} @signals = {} end |
Instance Attribute Details
#methods ⇒ Object
The proxied methods contained in the interface.
17 18 19 |
# File 'lib/dbus/proxy_object_interface.rb', line 17 def methods @methods end |
#name ⇒ Object (readonly)
The name of the interface.
23 24 25 |
# File 'lib/dbus/proxy_object_interface.rb', line 23 def name @name end |
#object ⇒ Object (readonly)
The proxy object to which this interface belongs.
21 22 23 |
# File 'lib/dbus/proxy_object_interface.rb', line 21 def object @object end |
#signals ⇒ Object
The proxied signals contained in the interface.
19 20 21 |
# File 'lib/dbus/proxy_object_interface.rb', line 19 def signals @signals end |
Instance Method Details
#[](propname) ⇒ Object
Read a property.
116 117 118 119 120 121 122 123 124 |
# 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) ⇒ Object
Write a property.
129 130 131 |
# File 'lib/dbus/proxy_object_interface.rb', line 129 def []=(propname, value) object[PROPERTY_INTERFACE].Set(name, propname, value) end |
#all_properties ⇒ Hash{String}
Read all properties at once, as a hash.
135 136 137 138 139 140 141 142 143 |
# 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) ⇒ Object
Defines a signal or method based on the descriptor m.
81 82 83 84 85 86 87 |
# 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) ⇒ Object
Defines a proxied method on the interface.
90 91 92 93 94 |
# 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) ⇒ Object
Defines a method on the interface from the Method descriptor m.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# 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) ⇒ Object
Defines a signal from the descriptor s.
76 77 78 |
# File 'lib/dbus/proxy_object_interface.rb', line 76 def define_signal_from_descriptor(s) @signals[s.name] = s end |
#on_signal(name, &block) ⇒ void #on_signal(bus, name, &block) ⇒ void
This method returns an undefined value.
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.
103 104 105 106 107 108 109 110 |
# 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 ⇒ Object
Returns the string representation of the interface (the name).
35 36 37 |
# File 'lib/dbus/proxy_object_interface.rb', line 35 def to_str @name end |