dbus service: starting DBus interface release
authorFrederic PAUT <frederic.paut@linux.intel.com>
Wed, 27 Feb 2013 11:36:13 +0000 (12:36 +0100)
committerFrederic PAUT <frederic.paut@linux.intel.com>
Wed, 27 Feb 2013 11:36:13 +0000 (12:36 +0100)
adding some debug facilities (func name in traces...)

cloudeebus/cloudeebus.js
cloudeebus/cloudeebus.py

index 14c2f5e..7bd8408 100644 (file)
@@ -120,6 +120,7 @@ cloudeebus.SystemBus = function() {
 cloudeebus.BusConnection = function(name, session) {
        this.name = name;
        this.wampSession = session;
+       this.service = null;
        return this;
 };
 
@@ -133,11 +134,12 @@ cloudeebus.BusConnection.prototype.getObject = function(busName, objectPath, int
 
 
 cloudeebus.BusConnection.prototype.addService = function(serviceName, successCB, errorCB) {
-       self = this;
+       var self = this;
        
        cloudeebusService = new cloudeebus.Service(this.wampSession, this, serviceName);
        
-       function busServiceAddedSuccessCB() {
+       function busServiceAddedSuccessCB(service) {
+               self.service = service;
                if (successCB)
                        successCB(cloudeebusService);
        }
@@ -148,8 +150,6 @@ cloudeebus.BusConnection.prototype.addService = function(serviceName, successCB,
        }
        
        cloudeebusService.add(busServiceAddedSuccessCB, busServiceAddedErrorCB);
-       
-       return cloudeebusService;
 };
 
 
@@ -164,63 +164,69 @@ cloudeebus.Service = function(session, busConnection, name) {
 };
 
 cloudeebus.Service.prototype.add = function(successCB, errorCB) {
-       self = this;
-       
-       function addServiceSuccessCB(dbusService) {
+       function ServiceAddSuccessCB(dbusService) {
                if (successCB) {
                        try { // calling dbus hook object function for un-translated types
                                successCB(dbusService);
                        }
                        catch (e) {
-                               alert("Method callback exception: " + e);
+                               alert(arguments.callee.name + "-> Method callback exception: " + e);
                        }
                }
        }
        
-       function addServiceErrorCB(error) {
-               if (errorCB)
-                       errorCB(error.desc);
-       }
-
        var arglist = [
            this.busConnection,
            this.name
            ];
 
        // call dbusSend with bus type, destination, object, message and arguments
-       self.wampSession.call("serviceAdd", arglist).then(addServiceSuccessCB, addServiceErrorCB);
+       this.wampSession.call("serviceAdd", arglist).then(ServiceAddSuccessCB, errorCB);
 };
 
 cloudeebus.Service.prototype.addAgent = function(objectPath, xmlTemplate, successCB, errorCB) {
-       self = this;
-       
-       function addAgentSuccessCB(dbusService) {
+       function ServiceAddAgentSuccessCB(dbusService) {
                if (successCB) {
                        try { // calling dbus hook object function for un-translated types
                                successCB(dbusService);
                        }
                        catch (e) {
-                               alert("Method callback exception: " + e);
+                               alert(arguments.callee.name + "-> Method callback exception: " + e);
                        }
                }
        }
        
-       function addAgentErrorCB(error) {
-               if (errorCB)
-                       errorCB(error.desc);
-       }
-
        var arglist = [
            objectPath,
            xmlTemplate
            ];
 
        // call dbusSend with bus type, destination, object, message and arguments
-       self.wampSession.call("serviceAddAgent", arglist).then(addAgentSuccessCB, addAgentErrorCB);
+       this.wampSession.call("serviceAddAgent", arglist).then(ServiceAddAgentSuccessCB, errorCB);
+};
+
+cloudeebus.Service.prototype.delAgent = function(objectPath, successCB, errorCB) {
+       function ServiceDelAgentSuccessCB(agent) {
+               if (successCB) {
+                       try { // calling dbus hook object function for un-translated types
+                               successCB(agent);
+                       }
+                       catch (e) {
+                               alert(arguments.callee.name + "-> Method callback exception: " + e);
+                       }
+               }
+       }
+       
+       var arglist = [
+           objectPath
+           ];
+
+       // call dbusSend with bus type, destination, object, message and arguments
+       this.wampSession.call("serviceDelAgent", arglist).then(ServiceDelAgentSuccessCB, errorCB);
 };
 
 cloudeebus.Service.prototype.registerMethod = function(methodId, methodHandler) {
-       self.wampSession.subscribe(methodId, methodHandler);
+       this.wampSession.subscribe(methodId, methodHandler);
 };
 
 cloudeebus.Service.prototype.returnMethod = function(methodId, success, result, successCB, errorCB) {
@@ -230,7 +236,7 @@ cloudeebus.Service.prototype.returnMethod = function(methodId, success, result,
            result
            ];
 
-           self.wampSession.call("returnMethod", arglist).then(successCB, errorCB);
+       this.wampSession.call("returnMethod", arglist).then(successCB, errorCB);
 };
 
 
index 2412137..2f7a1b2 100755 (executable)
@@ -541,8 +541,23 @@ class CloudeebusService:
         self.srvName = list[1]
         if (self.services.has_key(self.srvName) == False):            
             self.services[self.srvName] = dbus.service.BusName(name = self.srvName, bus = self.bus)
-        return self.srvName
-                    
+            return self.srvName
+
+    @exportRpc
+    def serviceRelease(self, list):
+        '''
+        arguments: busName, srvName
+        '''
+        busName = list[0]
+        self.bus =  cache.dbusConnexion( busName['name'] )
+        self.srvName = list[1]
+        if (self.services.has_key(self.srvName) == True):
+            exe_str = "self.services['" + self.srvName +"']"
+            exec (exe_str, globals(), locals())
+            return self.srvName
+        else:
+            raise Exception(self.srvName + " do not exist")
+                   
     @exportRpc
     def serviceAddAgent(self, list):
         '''
@@ -550,10 +565,10 @@ class CloudeebusService:
         '''
         self.agentObjectPath = list[0]
         xmlTemplate = list[1]
-        className = re.sub('/', '_', self.agentObjectPath[1:])
-        if (self.dynDBusClasses.has_key(className) == False):
-            self.dynDBusClasses[className] = dynDBusClass(className, globals(), locals())
-            self.dynDBusClasses[className].createDBusServiceFromXML(xmlTemplate)
+        self.className = re.sub('/', '_', self.agentObjectPath[1:])
+        if (self.dynDBusClasses.has_key(self.className) == False):
+            self.dynDBusClasses[self.className] = dynDBusClass(self.className, globals(), locals())
+            self.dynDBusClasses[self.className].createDBusServiceFromXML(xmlTemplate)
             
             # For Debug only
             if (1):
@@ -563,14 +578,32 @@ class CloudeebusService:
                     
                     if os.access('./MyDbusClass.py', os.R_OK) == False:
                         f = open('./MyDbusClass.py', 'w')
-                        f.write(self.dynDBusClasses[className].class_code.exec_string)
+                        f.write(self.dynDBusClasses[self.className].class_code.exec_string)
                         f.close()
 #                self.dynDBusClass[className].p()
-                self.dynDBusClasses[className].declare()
+                self.dynDBusClasses[self.className].declare()
             
-            if (self.serviceAgents.has_key(className) == False):            
-                exe_str = "self.serviceAgents[" + className +"] = " + className + "(self.bus, callback=self.srvCB, objName=self.agentObjectPath, busName=self.srvName)"
+            if (self.serviceAgents.has_key(self.className) == False):            
+                exe_str = "self.serviceAgents['" + self.className +"'] = " + self.className + "(self.bus, callback=self.srvCB, objName=self.agentObjectPath, busName=self.srvName)"
                 exec (exe_str, globals(), locals())
+                return (self.agentObjectPath)
+        else:
+            raise Exception(self.agentObjectPath + " already exist !!")
+                    
+    @exportRpc
+    def serviceDelAgent(self, list):
+        '''
+        arguments: objectPath, xmlTemplate
+        '''
+        agentObjectPath = list[0]
+        className = re.sub('/', '_', agentObjectPath[1:])
+
+        if (self.serviceAgents.has_key(className)):            
+            exe_str = "self.serviceAgents['" + className +"'] = None"
+            exec (exe_str, globals(), locals())
+            return (self.className)
+        else:
+            raise Exception(agentObjectPath + "doesn't exist!")
                     
     @exportRpc
     def getVersion(self):