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"
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.
-
#singleton_class ⇒ Object
Returns the singleton class of the interface.
-
#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 |
# File 'lib/dbus/proxy_object_interface.rb', line 27 def initialize(object, name) @object, @name = object, name @methods, @signals = Hash.new, Hash.new 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.
113 114 115 |
# File 'lib/dbus/proxy_object_interface.rb', line 113 def [](propname) self.object[PROPERTY_INTERFACE].Get(self.name, propname)[0] end |
#[]=(propname, value) ⇒ Object
Write a property.
118 119 120 |
# File 'lib/dbus/proxy_object_interface.rb', line 118 def []=(propname, value) self.object[PROPERTY_INTERFACE].Set(self.name, propname, value) end |
#all_properties ⇒ Hash{String}
Read all properties at once, as a hash.
124 125 126 |
# File 'lib/dbus/proxy_object_interface.rb', line 124 def all_properties self.object[PROPERTY_INTERFACE].GetAll(self.name)[0] end |
#define(m) ⇒ Object
Defines a signal or method based on the descriptor m.
79 80 81 82 83 84 85 |
# File 'lib/dbus/proxy_object_interface.rb', line 79 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 |
#define_method(methodname, prototype) ⇒ Object
Defines a proxied method on the interface.
88 89 90 91 92 |
# File 'lib/dbus/proxy_object_interface.rb', line 88 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.
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 |
# File 'lib/dbus/proxy_object_interface.rb', line 43 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 |
#define_signal_from_descriptor(s) ⇒ Object
Defines a signal from the descriptor s.
74 75 76 |
# File 'lib/dbus/proxy_object_interface.rb', line 74 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.
101 102 103 104 105 106 107 108 |
# File 'lib/dbus/proxy_object_interface.rb', line 101 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 |
#singleton_class ⇒ Object
Returns the singleton class of the interface.
38 39 40 |
# File 'lib/dbus/proxy_object_interface.rb', line 38 def singleton_class (class << self ; self ; end) end |
#to_str ⇒ Object
Returns the string representation of the interface (the name).
33 34 35 |
# File 'lib/dbus/proxy_object_interface.rb', line 33 def to_str @name end |