From 278df285a40ade55f3ab0ff8466a1c847bd6cf62 Mon Sep 17 00:00:00 2001 From: Frederic PAUT Date: Thu, 21 Feb 2013 15:37:52 +0100 Subject: [PATCH] dbus service: returning dbus (success/error) response --- cloudeebus/cloudeebus.js | 10 ++++++++++ cloudeebus/cloudeebus.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/cloudeebus/cloudeebus.js b/cloudeebus/cloudeebus.js index c679145..14c2f5e 100644 --- a/cloudeebus/cloudeebus.js +++ b/cloudeebus/cloudeebus.js @@ -223,6 +223,16 @@ cloudeebus.Service.prototype.registerMethod = function(methodId, methodHandler) self.wampSession.subscribe(methodId, methodHandler); }; +cloudeebus.Service.prototype.returnMethod = function(methodId, success, result, successCB, errorCB) { + var arglist = [ + methodId, + success, + result + ]; + + self.wampSession.call("returnMethod", arglist).then(successCB, errorCB); +}; + /*****************************************************************************/ diff --git a/cloudeebus/cloudeebus.py b/cloudeebus/cloudeebus.py index fc2e614..f7588a3 100755 --- a/cloudeebus/cloudeebus.py +++ b/cloudeebus/cloudeebus.py @@ -419,6 +419,7 @@ class CloudeebusService: self.dynDBusClasses = {} # DBus class source code generated dynamically (a list because one by classname) self.services = {} # DBus service created self.serviceAgents = {} # Instantiated DBus class previously generated dynamically, for now, one by classname + self.servicePendingCalls = {} # JS methods called (and waiting for a Success/error response), containing 'methodId', (successCB, errorCB) def proxyObject(self, busName, serviceName, objectName): @@ -497,9 +498,37 @@ class CloudeebusService: return dbusCallHandler.callMethod() + @exportRpc + def returnMethod(self, list): + ''' + arguments: methodId, success (=true, error otherwise), result (to return) + ''' + methodId = list[0] + success = list[1] + result = list[2] + if (self.servicePendingCalls.has_key(methodId)): + cb = self.servicePendingCalls[methodId] + if (success): + successCB = cb["successCB"] + if (result != None): + successCB(result) + else: + successCB() + else: + errorCB = cb["errorCB"] + if (result != None): + errorCB(result) + else: + errorCB() + + def srvCB(self, name, async_succes_cb, async_error_cb, *args): print "self.srvCB(name='%s', args=%s')\n\n" % (name, str(args)) methodId = self.srvName + "#" + self.agentObjectPath + "#" + name + cb = { 'successCB': async_succes_cb, + 'errorCB': async_error_cb} + self.servicePendingCalls[methodId] = cb + print "factory.dispatch(methodId='%s', json.dumps(args)=%s')\n\n" % (methodId, json.dumps(args)) factory.dispatch(methodId, json.dumps(args)) -- 2.7.4