[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdegames/kajongg/src
From:       Wolfgang Rohdewald <wolfgang () rohdewald ! de>
Date:       2012-03-09 10:46:50
Message-ID: 20120309104650.B685DAC898 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1284573 by wrohdewald:

client and server now make sure their versions are compatible

 M  +2 -0      humanclient.py  
 M  +19 -1     server.py  
 M  +11 -2     tables.py  


--- trunk/KDE/kdegames/kajongg/src/humanclient.py #1284572:1284573
@@ -1101,6 +1101,8 @@
     def callServer(self, *args):
         """if we are online, call server"""
         if self.perspective:
+            if args[0] is None:
+                args = args[1:]
             try:
                 if Debug.traffic:
                     if self.game:
--- trunk/KDE/kdegames/kajongg/src/server.py #1284572:1284573
@@ -947,11 +947,29 @@
         """override pb.Avatar.detached"""
         self.server.logout(self)
         self.mind = None
-    def perspective_setClientProperties(self, dbPath, voiceId, maxGameId):
+    def perspective_setClientProperties(self, dbPath, voiceId, maxGameId, clientVersion=None):
         """perspective_* methods are to be called remotely"""
         self.dbPath = dbPath
         self.voiceId = voiceId
         self.maxGameId = maxGameId
+        serverVersion = InternalParameters.version
+        if clientVersion != serverVersion:
+            # we assume that versions x.y.* are compatible
+            if clientVersion is None:
+                # client passed no version info
+                return fail(srvError(pb.Error,
+                    m18nE('Your client has a version older than 4.9.0 but you need %1 for this server'),
+                        serverVersion))
+            else:
+                commonDigits = len([x for x in zip(
+                    clientVersion.split('.'),
+                    serverVersion.split('.'))
+                    if x[0] == x[1]])
+                if commonDigits < 2:
+                    return fail(srvError(pb.Error,
+                        m18nE('Your client has version %1 but you need %2 for this server'),
+                            clientVersion or '<4.9.0',
+                            '.'.join(serverVersion.split('.')[:2]) + '.*'))
     def perspective_sendTables(self):
         """perspective_* methods are to be called remotely"""
         return self.server.sendTables(self)
--- trunk/KDE/kdegames/kajongg/src/tables.py #1284572:1284573
@@ -254,8 +254,10 @@
             maxGameId = int(maxGameId) if maxGameId else 0
             self.client.callServer('setClientProperties',
                 str(Query.dbhandle.databaseName()),
-                voiceId, maxGameId).addErrback(self.tableError)
-            self.client.callServer('sendTables').addCallback(self.gotTables)
+                voiceId, maxGameId, InternalParameters.version). \
+                    addErrback(self.versionError). \
+                    addCallback(self.client.callServer, 'sendTables'). \
+                    addCallback(self.gotTables)
         else:
             self.hide()
 
@@ -370,6 +372,13 @@
         self.client.callServer('startGame', table.tableid).addErrback(self.tableError)
 
     @staticmethod
+    def versionError(err):
+        """log the twisted error"""
+        logWarning(err.getErrorMessage())
+        InternalParameters.field.abortGame()
+        return err
+
+    @staticmethod
     def tableError(err):
         """log the twisted error"""
         logWarning(err.getErrorMessage())
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic