diff libervia.tac @ 3:154d4caa57f4

server side: proper profile management in signals generic callback
author Goffi <goffi@goffi.org>
date Sun, 13 Feb 2011 16:16:40 +0100
parents 669c531a857e
children c28a4840e1a8
line wrap: on
line diff
--- a/libervia.tac	Tue Feb 08 21:18:31 2011 +0100
+++ b/libervia.tac	Sun Feb 13 16:16:40 2011 +0100
@@ -182,7 +182,7 @@
         Resource.__init__(self)
         self.register=None
         self.sat_host=sat_host
-        self.signalDeferred = None
+        self.signalDeferred = {}
 
     def plugRegister(self, register):
         self.register = register
@@ -190,23 +190,22 @@
     def jsonrpc_getSignals(self):
         """Keep the connection alive until a signal is received, then send it
         @return: (signal, *signal_args)"""
-        self.signalDeferred = defer.Deferred()
-        return self.signalDeferred
+        _session = self.request.getSession()
+        profile = _session.sat_profile
+        self.signalDeferred[profile] = defer.Deferred()
+        return self.signalDeferred[profile]
     
     def getGenericCb(self, function_name):
-        """Return a generic function which send all params to signalDeferred.callback"""
+        """Return a generic function which send all params to signalDeferred.callback
+        function must have profile as last argument"""
         def genericCb(*args):
-            if self.signalDeferred:
-                self.signalDeferred.callback((function_name,args))
+            profile = args[-1]
+            if profile in self.signalDeferred:
+                self.signalDeferred[profile].callback((function_name,args[:-1]))
             else:
                 print("Warning: signal [%s] can't be sent" % function_name)
         return genericCb
     
-    def genericCallback(self, *args):
-        """"This method send all params to signalDeferred"""
-        if self.signalDeferred:
-            print ("Sending signals %s")
-        
     def connected(self, profile):
         assert(self.register) #register must be plugged
         request = self.register.getWaitingRequest(profile)
@@ -259,7 +258,7 @@
             sys.exit(1)
         self.bridge.register("connected", self.signal_handler.connected)
         self.bridge.register("connectionError", self.signal_handler.connectionError)
-        for signal_name in ['presenceUpdate']:
+        for signal_name in ['presenceUpdate', 'personalEvent']:
             self.bridge.register(signal_name, self.signal_handler.getGenericCb(signal_name))
 
     def startService(self):