X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=cloudeebus%2Fcloudeebus.js;h=677f0029b8e3f7a30a5ccd56dcc41fa83ede2424;hb=c2e2edfe53a07103b72208b4702b627d2aec00a1;hp=bc34d4f39a29da596fd7ef8a782953fdea7c1dd8;hpb=6a667321616c8307957cb01ad11776076212e56e;p=contrib%2Fcloudeebus.git diff --git a/cloudeebus/cloudeebus.js b/cloudeebus/cloudeebus.js index bc34d4f..677f002 100644 --- a/cloudeebus/cloudeebus.js +++ b/cloudeebus/cloudeebus.js @@ -28,7 +28,10 @@ var dbus = { // hook object for dbus types not translated by python-json /*****************************************************************************/ -var cloudeebus = window.cloudeebus = {version: "0.3.1"}; +var cloudeebus = window.cloudeebus = { + version: "0.5.1", + minVersion: "0.3.2" +}; cloudeebus.reset = function() { cloudeebus.sessionBus = null; @@ -42,17 +45,30 @@ cloudeebus.log = function(msg) { }; +cloudeebus.versionCheck = function(version) { + var ver = version.split("."); + var min = cloudeebus.minVersion.split("."); + for (var i=0; i Number(min[i])) + return true; + if (Number(ver[i]) < Number(min[i])) + return false; + } + return true; +}; + + cloudeebus.connect = function(uri, manifest, successCB, errorCB) { cloudeebus.reset(); cloudeebus.uri = uri; function onCloudeebusVersionCheckCB(version) { - if (cloudeebus.version == version) { + if (cloudeebus.versionCheck(version)) { cloudeebus.log("Connected to " + cloudeebus.uri); if (successCB) successCB(); } else { - var errorMsg = "Cloudeebus server version " + version + " and client version " + cloudeebus.version + " mismatch"; + var errorMsg = "Cloudeebus server version " + version + " unsupported, need version " + cloudeebus.minVersion + " or superior"; cloudeebus.log(errorMsg); if (errorCB) errorCB(errorMsg); @@ -81,7 +97,7 @@ cloudeebus.connect = function(uri, manifest, successCB, errorCB) { if (manifest) cloudeebus.wampSession.authreq( manifest.name, - {permissions: JSON.stringify(manifest.permissions)} + {permissions: manifest.permissions} ).then(onWAMPSessionChallengedCB, onWAMPSessionAuthErrorCB); else cloudeebus.wampSession.authreq().then(function() { @@ -135,19 +151,262 @@ cloudeebus.BusConnection.prototype.getObject = function(busName, objectPath, int /*****************************************************************************/ -cloudeebus.Request = function(proxy, onsuccess, onerror) { - this.proxy = proxy; - this.error = null; +function _processWrappers(wrappers, value) { + for (var i=0; i nArgs + 2) - throw "Error: method " + method + " takes " + nArgs + " parameters, got " + arguments.length + "."; var args = []; - var successCB = null; - var errorCB = null; for (var i=0; i < nArgs; i++ ) args.push(arguments[i]); - if (arguments.length > nArgs) - successCB = arguments[nArgs]; - if (arguments.length > nArgs + 1) - errorCB = arguments[nArgs + 1]; - self.callMethod(ifName, method, args).then(successCB, errorCB); - }; - + return self.callMethod(ifName, method, args, signature); + }; }; -cloudeebus.ProxyObject.prototype.callMethod = function(ifName, method, args, successCB, errorCB) { + +cloudeebus.ProxyObject.prototype.callMethod = function(ifName, method, args, signature) { var self = this; - var request = new cloudeebus.Request(this, successCB, errorCB); - - function callMethodSuccessCB(str) { - request.result = eval(str); - if (request.onsuccess) { + + var promise = new cloudeebus.Promise(function (resolver) { + function callMethodSuccessCB(str) { try { // calling dbus hook object function for un-translated types - request.onsuccess.apply(request.proxy, request.result); + var result = eval(str); + resolver.fulfill(result[0], true); } catch (e) { cloudeebus.log("Method callback exception: " + e); - if (request.onerror) - request.onerror(e); + resolver.reject(e, true); } } - } - - function callMethodErrorCB(error) { - cloudeebus.log("Error calling method: " + method + " on object: " + self.objectPath + " : " + error.desc); - request.error = error.desc; - if (request.onerror) - request.onerror(request.error); - } - var arglist = [ - self.busConnection.name, - self.busName, - self.objectPath, - ifName, - method, - JSON.stringify(args) - ]; + function callMethodErrorCB(error) { + cloudeebus.log("Error calling method: " + method + " on object: " + self.objectPath + " : " + error.desc); + resolver.reject(error.desc, true); + } - // call dbusSend with bus type, destination, object, message and arguments - self.wampSession.call("dbusSend", arglist).then(callMethodSuccessCB, callMethodErrorCB); - return request; + var arglist = [ + self.busConnection.name, + self.busName, + self.objectPath, + ifName, + method, + JSON.stringify(args) + ]; + + // call dbusSend with bus type, destination, object, message and arguments + self.wampSession.call("dbusSend", arglist).then(callMethodSuccessCB, callMethodErrorCB); + }); + + return promise; }; -cloudeebus.ProxyObject.prototype.connectToSignal = function(ifName, signal, successCB, errorCB) { +cloudeebus.ProxyObject.prototype.connectToSignal = function(ifName, signal, handlerCB, errorCB) { var self = this; function signalHandler(id, data) { - if (successCB) { + if (handlerCB) { try { // calling dbus hook object function for un-translated types - successCB.apply(self, eval(data)); + handlerCB.apply(self, eval(data)); } catch (e) { cloudeebus.log("Signal handler exception: " + e);