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