Class DBus::DBusCallable
In: lib/dbus.rb
Parent: Object

Base class for objects that support D-BUS invocation messages

Methods

Public Class methods

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.

[Source]

     # File lib/dbus.rb, line 214
214:     def initialize(connection, dbus_methods=[])
215:       @connection = connection
216:       @dbus_methods = dbus_methods
217:     end

Public Instance methods

Invoke the method name, with arguments args, and source invocation request message source_message, returning the reply message.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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

[Source]

     # 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

Called when this object is unregistered from the connection

[Source]

     # File lib/dbus.rb, line 256
256:     def on_unregister(connection)
257:     end

[Validate]