Api level 4 - fpaut/cloudeebus GitHub Wiki
Javascript objects and interfaces
Following is a brief description of the cloudeebus Javascript objects and their methods. This API is designed to be somewhat similar to the higher level dbus-python APIs. All asynchronous methods take optional success and error callbacks.
cloudeebus
Object
There is one global instance of the cloudeebus
object created when cloudeebus.js
is loaded.
It manages the initial connection to the server, and holds the Session and System bus connection.
Attributes
version
: current version of the Javascript library
minVersion
: minimum supported version of the Python server
Methods
cloudeebus.connect(uri, manifest, successCB, errorCB)
Connection to the cloudeebus.py server. Returns nothing.
uri
: websocket uri, for instance ws://localhost:9000
manifest
: A json manifest. See the "managing security" section for an example. When server runs in --opendoor
mode, pass null
.
successCB
: callback fired when connection succeeds, takes no argument.
errorCB
: callback fired when connection fails, takes error message string for argument.
cloudeebus.SessionBus()
Returns a cloudeebus.BusConnection
object holding a connection to the Session bus.
cloudeebus.SystemBus()
Returns a cloudeebus.BusConnection
object holding a connection to the System bus.
cloudeebus.log(message)
Does nothing. Replace by your custom method to display internal error messages, for instance:
cloudeebus.log = function(msg) {
alert(msg);
}
cloudeebus.BusConnection
Interface
A BusConnection
object holds a connection to the Session bus or the System bus, for instance:
var bus = cloudeebus.SessionBus();
Methods
getObject(busName, objectPath, introspectCB, errorCB)
Returns a cloudeebus.ProxyObject
object that can call DBus methods and be registered for DBus signals.
busName
: DBus service, for instance org.gnome.ScreenSaver
objectPath
: Object for which to get the proxy, for instance /
introspectCB
: Optional callback. If passed, the object is introspected, i.e. populated with its methods and attributes and passed to the callback as argument.
errorCB
: Optional callback fired on introspection error, takes error message string for argument.
cloudeebus.ProxyObject
Interface
A ProxyObject
is a proxy to a remote DBus objects, with its methods and attributes, for instance:
var obj = bus.getObject("org.gnome.ScreenSaver", "/");
Attributes
busName
: DBus service for this object.
objectPath
: DBus path for this object.
interfaceProxies
: Dictionary of cloudeebus.ProxyObject
objects indexed by interfaces.
If the object is introspected, i.e. if a introspectCB
callback was passed to bus.getObject
, then it also has the DBus Properties of the remote object as attributes.
Methods
callMethod(ifName, method, args, signature)
Calls a DBus method on the proxy object. Returns a cloudeebus.Request
object.
ifName
: Interface name, for instance org.gnome.ScreenSaver
method
: Name of the method to call, for instance SetActive
args
: Argument list for the method, for instance [true]
signature
: Optional DBus signature for the method, for instance "b"
If the object is introspected then the method can be called directly by its name, for instance in the example above:
obj.SetActive(true)
instead of:
obj.callMethod("org.gnome.ScreenSaver", "SetActive", [true], "b")
getInterface(ifName)
Use on introspected objects. Returns a version of this cloudeebus.ProxyObject
with only attributes and methods of interface which name is passed as parameter. This is useful if the object implements interfaces with conflicting method or attribute names.
ifName
: Interface name, for instance org.gnome.ScreenSaver
Interface objects are stored in the interfaceProxies
dictionary. Iterate on the dictionary to get interfaces name.
connectToSignal(ifName, signal, handlerCB, errorCB)
Connects the proxy object to a DBus signal. Returns nothing.
ifName
: Interface name, for instance org.gnome.ScreenSaver
signal
: Name of the signal to register for, for instance ActiveChanged
handlerCB
: Signal handler callback, fired when the signal is emitted. Takes the dbus signal data for arguments.
errorCB
: Optional callback fired on error, takes error message string for argument.
disconnectSignal(ifName, signal)
Disconnects the proxy object from a DBus signal. Returns nothing.
ifName
: Interface name, for instance org.gnome.ScreenSaver
signal
: Name of the signal to register for, for instance ActiveChanged
cloudeebus.Request
Interface
This is an implementation of the DOMRequest interface returned by cloudeebus.ProxyObject.callMethod. The then
method can be used to set callbacks right on an asynchronous call result, for instance:
obj.SetActive(true).then(successCB, errorCB);
is equivalent to:
var req = obj.SetActive(true);
req.onsuccess = successCB;
req.onerror = errorCB;
Attributes
readyState
: "pending", or "done"
error
: error string on failure
result
: result on success
onsuccess
: success callback
onerror
: error callback
Methods
then(successCB, errorCB)
Sets the onsuccess
/ onerror
callbacks of this cloudeebus.Request
object.
successCB
: callback fired when the proxy method call succeeds. Arguments depends on method.
errorCB
: callback fired when the proxy method call fails, takes error message string for argument.
Example
The following example locks the screen. No manifest is passed, so the server must be executed in --opendoor
mode, for instance:
cloudeebus.py --debug --opendoor --port=9001
The Javascript code connects to cloudeebus without a manifest, gets an introspected proxy for the screen saver root object on the session bus, and locks the screen. The success/error callbacks are setted with the method 'then' from the DOMRequest interface.
function connectSuccess() {
var bus = cloudeebus.SessionBus();
bus.getObject("org.gnome.ScreenSaver", "/", lock);
}
function lockSuccess() {
cloudeebus.log('Device successfully locked');
}
function lockFail(error) {
cloudeebus.log('Lock fails!');
}
function lock(proxy) {
proxy.SetActive(true).then(lockSuccess, lockFail);
}
cloudeebus.connect("ws://localhost:9001", null, connectSuccess);