Class DBus::Service
In: lib/dbus/bus.rb
Parent: Object

This represents a remote service. It should not be instantiated directly Use Bus::service()

Methods

exists?   export   get_node   introspect   new   object   unexport  

Attributes

bus  [R]  The bus the service is running on.
name  [R]  The service name.
root  [R]  The service root (FIXME).

Public Class methods

Create a new service with a given name on a given bus.

[Source]

# File lib/dbus/bus.rb, line 31
    def initialize(name, bus)
      @name, @bus = name, bus
      @root = Node.new("/")
    end

Public Instance methods

Determine whether the service name already exists.

[Source]

# File lib/dbus/bus.rb, line 37
    def exists?
      bus.proxy.ListNames[0].member?(@name)
    end

Export an object obj (an DBus::Object subclass instance).

[Source]

# File lib/dbus/bus.rb, line 62
    def export(obj)
      obj.service = self
      get_node(obj.path, true).object = obj
    end

Get the object node corresponding to the given path. if create is true, the the nodes in the path are created if they do not already exist.

[Source]

# File lib/dbus/bus.rb, line 85
    def get_node(path, create = false)
      n = @root
      path.sub(/^\//, "").split("/").each do |elem|
        if not n[elem]
          if not create
            return nil
          else
            n[elem] = Node.new(elem)
          end
        end
        n = n[elem]
      end
      if n.nil?
        puts "Warning, unknown object #{path}" if $DEBUG
      end
      n
    end

Perform an introspection on all the objects on the service (starting recursively from the root).

[Source]

# File lib/dbus/bus.rb, line 43
    def introspect
      if block_given?
        raise NotImplementedError
      else
        rec_introspect(@root, "/")
      end
      self
    end

Retrieves an object (ProxyObject) at the given path.

[Source]

# File lib/dbus/bus.rb, line 53
    def object(path)
      node = get_node(path, true)
      if node.object.nil?
        node.object = ProxyObject.new(@bus, @name, path)
      end
      node.object
    end

Undo exporting an object obj. Raises ArgumentError if it is not a DBus::Object. Returns the object, or false if obj was not exported.

[Source]

# File lib/dbus/bus.rb, line 70
    def unexport(obj)
      raise ArgumentError.new("DBus::Service#unexport() expects a DBus::Object argument") unless obj.kind_of?(DBus::Object)
      return false unless obj.path
      pathSep = obj.path.rindex("/") #last path seperator
      parent_path = obj.path[1..pathSep-1]
      node_name = obj.path[pathSep+1..-1]

      parent_node = get_node(parent_path, false)
      return false unless parent_node
      obj.service = nil
      parent_node.delete(node_name)
    end

[Validate]