Merge pull request #40 from fpaut/master
authorLuc Yriarte <lyriarte@free.fr>
Tue, 27 Aug 2013 09:23:13 +0000 (02:23 -0700)
committerLuc Yriarte <lyriarte@free.fr>
Tue, 27 Aug 2013 09:23:13 +0000 (02:23 -0700)
Bug Fix on emit signal with more than 1 parameter

cloudeebus/cloudeebus.js
cloudeebus/cloudeebus.py

index 71d7a8c..7b8391f 100644 (file)
@@ -305,14 +305,20 @@ cloudeebus.Service.prototype._addSignal = function(ifName, signal, agent) {
                        methodExist = true;
                } else {
                        agent.jsHdl.interfaceProxies[ifName][signal] = function() {
-                               service._emitSignal(agent.objectPath, signal, arguments[0]);
+                               var args = [];
+                               for (var i=0; i < arguments.length; i++ )
+                                       args.push(arguments[i]);
+                               service._emitSignal(agent.objectPath, signal, args);
                        };
                return;
        }
-               
-       if ((agent.jsHdl[signal] == undefined || agent.jsHdl[signal] == null) && !methodExist) 
+
+       if ((agent.jsHdl[signal] == undefined || agent.jsHdl[signal] == null) && !methodExist)
                agent.jsHdl[signal] = function() {
-                       service._emitSignal(agent.objectPath, signal, arguments[0]);
+                       var args = [];
+                       for (var i=0; i < arguments.length; i++ )
+                               args.push(arguments[i]);
+                       service._emitSignal(agent.objectPath, signal, args);
                };
        else
                cloudeebus.log("Can not create new method to emit signal '" + signal + "' in object JS this method already exist!");
@@ -446,11 +452,11 @@ cloudeebus.Service.prototype._returnMethod = function(methodId, callIndex, succe
 };
 
 
-cloudeebus.Service.prototype._emitSignal = function(objectPath, signalName, result, successCB, errorCB) {
+cloudeebus.Service.prototype._emitSignal = function(objectPath, signalName, args, successCB, errorCB) {
        var arglist = [
            objectPath,
            signalName,
-           result
+           JSON.stringify(args)
            ];
 
        this.wampSession.call("emitSignal", arglist).then(successCB, errorCB);
index 1ab1346..54b5c29 100755 (executable)
@@ -527,17 +527,19 @@ class CloudeebusService:
     @exportRpc
     def emitSignal(self, list):
         '''
-        arguments: agentObjectPath, signalName, result (to emit)
+        arguments: agentObjectPath, signalName, args (to emit)
         '''
         objectPath = list[0]
         className = re.sub('/', '_', objectPath[1:])
         signalName = list[1]
-        result = list[2]
-        if (self.serviceAgents.has_key(className) == True):
-            if (result != None):
-                exe_str = "self.serviceAgents['"+ className +"']."+ signalName + "(" + str(result) + ")"
-            else:
-                exe_str = "self.serviceAgents['"+ className +"']."+ signalName + "()"
+        args = json.loads(list[2])
+        if (self.serviceAgents.has_key(className) == True):            
+            exe_str = "self.serviceAgents['"+ className +"']."+ signalName + "("
+            if len(args) > 0:
+                exe_str += json.dumps(args[0])
+                for idx in args[1:]:
+                    exe_str += "," + json.dumps(idx)
+            exe_str += ")"               
             eval(exe_str, self.globalCtx, self.localCtx)
         else:
             raise Exception("No object path " + objectPath)