Ejemplo n.º 1
0
Archivo: user.py Proyecto: KDE/kajongg
 def perspective_setClientProperties(
         self, dbIdent, voiceId, maxGameId, clientVersion=None):
     """perspective_* methods are to be called remotely"""
     self.dbIdent = dbIdent
     self.voiceId = voiceId
     self.maxGameId = maxGameId
     clientVersion = nativeString(clientVersion)
     serverVersion = Internal.defaultPort
     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(b'.'),
                 serverVersion.split(b'.'))
                                 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]) + '.*'))
     if Debug.table:
         logDebug(u'client has dbIdent={} voiceId={} maxGameId={} clientVersion {}'.format(
             self.dbIdent, self.voiceId, self.maxGameId, clientVersion))
     self.server.sendTables(self)
Ejemplo n.º 2
0
 def addUser(self, user):
     """add user to this table"""
     if user.name in list(x.name for x in self.users):
         raise srvError(pb.Error, i18nE('You already joined this table'))
     if len(self.users) == self.maxSeats():
         raise srvError(pb.Error, i18nE('All seats are already taken'))
     self.users.append(user)
     if Debug.table:
         logDebug('%s seated on table %s' % (user.name, self))
     self.sendChatMessage(
         ChatMessage(self.tableid,
                     user.name,
                     i18nE('takes a seat'),
                     isStatusMessage=True))
Ejemplo n.º 3
0
    def newTable(self,
                 user,
                 ruleset,
                 playOpen,
                 autoPlay,
                 wantedGame,
                 tableId=None):
        """user creates new table and joins it"""
        def gotRuleset(ruleset):
            """now we have the full ruleset definition from the client"""
            Ruleset.cached(
                ruleset).save()  # make it known to the cache and save in db

        if tableId in self.tables:
            return fail(
                srvError(
                    pb.Error,
                    'You want a new table with id=%d but that id is already used for table %s'
                    % (tableId, self.tables[tableId])))
        if Ruleset.hashIsKnown(ruleset):
            return self.__newTable(None, user, ruleset, playOpen, autoPlay,
                                   wantedGame, tableId)
        else:
            return self.callRemote(
                user, 'needRuleset',
                ruleset).addCallback(gotRuleset).addCallback(
                    self.__newTable, user, ruleset, playOpen, autoPlay,
                    wantedGame, tableId)
Ejemplo n.º 4
0
 def _lookupTable(self, tableid):
     """return table by id or raise exception"""
     if tableid not in self.tables:
         raise srvError(pb.Error,
                        i18nE('table with id <numid>%1</numid> not found'),
                        tableid)
     return self.tables[tableid]
Ejemplo n.º 5
0
 def perspective_setClientProperties(self,
                                     dbIdent,
                                     voiceId,
                                     maxGameId,
                                     clientVersion=None):
     """perspective_* methods are to be called remotely"""
     self.pinged()
     self.dbIdent = dbIdent
     self.voiceId = voiceId
     self.maxGameId = maxGameId
     serverVersion = Internal.defaultPort
     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,
                     i18nE(
                         '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(b'.'),
                                serverVersion.split(b'.')) if x[0] == x[1]
             ])
             if commonDigits < 2:
                 return fail(
                     srvError(
                         pb.Error,
                         i18nE(
                             'Your client has version %1 but you need %2 for this server'
                         ), clientVersion or '<4.9.0',
                         '.'.join(serverVersion.split('.')[:2]) + '.*'))
     if Debug.table:
         logDebug(
             'client has dbIdent={} voiceId={} maxGameId={} clientVersion {}'
             .format(self.dbIdent, self.voiceId, self.maxGameId,
                     clientVersion))
     self.server.sendTables(self)
Ejemplo n.º 6
0
 def collectGameIdAnswers(self, requests, gameid):
     """clients answered if the proposed game id is free"""
     if requests:
         # when errors happen, there might be no requests left
         for msg in requests:
             if msg.answer == Message.NO:
                 self.proposeGameId(gameid + 1)
                 return
             elif msg.answer != Message.OK:
                 raise srvError(
                     pb.Error, 'collectGameIdAnswers got neither NO nor OK')
         self.game.gameid = gameid
         self.initGame()
Ejemplo n.º 7
0
 def readyForGameStart(self, user):
     """the table initiator told us he wants to start the game"""
     if len(self.users) < self.maxSeats() and self.owner != user:
         raise srvError(
             pb.Error,
             i18nE('Only the initiator %1 can start this game, you are %2'),
             self.owner.name, user.name)
     if self.suspendedAt:
         self.__connectPlayers()
         self.__checkDbIdents()
         self.initGame()
     else:
         self.game = self.__prepareNewGame()
         self.__connectPlayers()
         self.__checkDbIdents()
         self.proposeGameId(self.calcGameId())