| Class | DBus::DBusCallable |
| In: |
lib/dbus.rb
|
| Parent: | Object |
Base class for objects that support D-BUS invocation messages
Create a new DBusCallable instance on the specified connection. dbus_methods is an Array containing a list of symbols for the methods which may be invoked remotely.
# File lib/dbus.rb, line 214
214: def initialize(connection, dbus_methods=[])
215: @connection = connection
216: @dbus_methods = dbus_methods
217: end
Invoke the method name, with arguments args, and source invocation request message source_message, returning the reply message.
# File lib/dbus.rb, line 227
227: def dispatch(name, args, source_message)
228: unless @dbus_methods.include?(name.to_sym)
229: return new_error_reply(source_message, "Method '#{name}' not in allowed list")
230: end
231: unless self.respond_to?(name)
232: return new_error_reply(source_message, "No such method '#{name}'")
233: end
234: ret = nil
235: begin
236: args = [source_message, *args]
237: ret = self.send(name, *args)
238: rescue
239: return new_error_reply(source_message, $!.to_s)
240: end
241: reply = DBus::Binding::DBusMessage.new_method_return(source_message)
242: iter = reply.get_iter
243: iter.append(ret)
244: reply
245: end
Process the method invocation message given in message. Returns the reply message.
# File lib/dbus.rb, line 221
221: def dispatch_message(message)
222: dispatch(message.get_member, message.to_a, message)
223: end
Generate a new error reply from source message message, and error string error_message.
# File lib/dbus.rb, line 249
249: def new_error_reply(message, error_message)
250: error_name = self.class.to_s.gsub(/::/, '.')
251: error_name += '.ERROR'
252: DBus::Binding::DBusMessage.new_error(message, error_name, error_message)
253: end
Called when a message arrives on the connection for this object
# File lib/dbus.rb, line 260
260: def on_message(connection, message)
261: reply = dispatch_message(message)
262: @connection.send(reply)
263: HANDLER_RESULT_HANDLED
264: end