Index: debian/python-poker-network.links =================================================================== --- debian/python-poker-network.links (révision 6257) +++ debian/python-poker-network.links (copie de travail) -1,4 +1,5 @@ usr/share/poker-network/schema.sql usr/share/dbconfig-common/data/python-poker-network/install/mysql +usr/share/poker-network/1.7.5-2.0.0.sql usr/share/dbconfig-common/data/python-poker-network/upgrade/mysql/2.0.0 usr/share/poker-network/1.7.4-1.7.5.sql usr/share/dbconfig-common/data/python-poker-network/upgrade/mysql/1.7.5 usr/share/poker-network/1.7.3-1.7.4.sql usr/share/dbconfig-common/data/python-poker-network/upgrade/mysql/1.7.4 usr/share/poker-network/1.6.0-1.7.0.sql usr/share/dbconfig-common/data/python-poker-network/upgrade/mysql/1.7.0 Index: pokernetwork/pokerpackets.py =================================================================== --- pokernetwork/pokerpackets.py (révision 6257) +++ pokernetwork/pokerpackets.py (copie de travail) -1732,6 +1732,7 @@ format = "!I" format_size = calcsize(format) + TIME_BEFORE_YOU_CAN_REBUY_CODE = "1" def __init__(self, *args, **kwargs): self.amount = kwargs.get("amount",0) -1849,6 +1850,7 @@ info = PacketPokerId.info + ( ('name', 'noname', 's'), ('outfit', 'random', 's'), ('url', 'random', 's'), + ('tables_max', -1, 'I'), # FIXME_PokerPlayerInfoLocale: # (see also sr #2262 ) # should "locale" be here? It's -1863,20 +1865,22 @@ self.name = kwargs.get('name', "noname") self.url = kwargs.get('url', "random") self.outfit = kwargs.get('outfit',"random") + self.tables_max = kwargs.get('tables_max',-1) PacketPokerId.__init__(self, *args, **kwargs) def pack(self): - return PacketPokerId.pack(self) + self.packstring(self.name) + self.packstring(self.outfit) + self.packstring(self.url) + return PacketPokerId.pack(self) + self.packstring(self.name) + self.packstring(self.outfit) + self.packstring(self.url) + pack(PacketPokerPlayerInfo.format, self.tables_max) def unpack(self, block): block = PacketPokerId.unpack(self, block) (block, self.name) = self.unpackstring(block) (block, self.outfit) = self.unpackstring(block) (block, self.url) = self.unpackstring(block) - return block + (self.tables_max,) = unpack(PacketPokerPlayerInfo.format, block[:PacketPokerPlayerInfo.format_size]) + return block[PacketPokerPlayerInfo.format_size:] def calcsize(self): - return PacketPokerId.calcsize(self) + self.calcsizestring(self.name) + self.calcsizestring(self.outfit) + self.calcsizestring(self.url) + return PacketPokerId.calcsize(self) + self.calcsizestring(self.name) + self.calcsizestring(self.outfit) + self.calcsizestring(self.url) + PacketPokerPlayerInfo.format_size def __str__(self): return PacketPokerId.__str__(self) + " name = %s, url = %s, outfit = %s " % ( self.name , self.url, self.outfit ) Index: pokernetwork/pokerservice.py =================================================================== --- pokernetwork/pokerservice.py (révision 6257) +++ pokernetwork/pokerservice.py (copie de travail) -102,6 +102,7 @@ UPDATE_TOURNEYS_SCHEDULE_DELAY = 10 * 60 CHECK_TOURNEYS_SCHEDULE_DELAY = 60 DELETE_OLD_TOURNEYS_DELAY = 1 * 60 * 60 +CLEANUP_SERIAL2LEAVETIME_DELAY = 1 * 60 * 60 class IPokerService(Interface): -295,6 +296,7 @@ self.createTable(0, description) self.cleanupTourneys() self.updateTourneysSchedule() + self.cleanupSerial2leavetimeTimer() self.messageCheck() self.poker_auth.SetLevel(PACKET_POKER_SEAT, User.REGULAR) self.poker_auth.SetLevel(PACKET_POKER_GET_USER_INFO, User.REGULAR) -304,6 +306,19 @@ self.poker_auth.SetLevel(PACKET_POKER_HAND_SELECT_ALL, User.ADMIN) service.Service.startService(self) self.down = False + + + def cleanupSerial2leavetimeTimer(self): + for table in self.tables.values(): + serialsToDelete = {} + for (player_serial , leavetime ) in table.serial2leavetime.iteritems(): + if (time.time() - leavetime[0]) > table.timeBeforeYouCanRebuyMin : + serialsToDelete[player_serial] = player_serial; + for serial in serialsToDelete: + del table.serial2leavetime[serial] + + self.timer['cleanupSerial2leavetimeTimer'] = reactor.callLater(CLEANUP_SERIAL2LEAVETIME_DELAY, self.cleanupSerial2leavetimeTimer) + def message(self, string): print "PokerService: " + str(string) -449,6 +464,7 @@ def shutdown(self): self.shutting_down = True + self.cancelTimer('cleanupSerial2leavetimeTimer') self.cancelTimer('checkTourney') self.cancelTimer('updateTourney') self.cancelTimer('messages') -1905,6 +1921,7 @@ name = "anonymous", url= "random", outfit = "random", + tables_max = -1, # FIXME_PokerPlayerInfoLocale: # (see also sr #2262 ) # this sets locale but -1920,19 +1937,20 @@ return placeholder cursor = self.db.cursor() - sql = ( "select locale,name,skin_url,skin_outfit from users where serial = " + str(serial) ) + sql = ( "select locale,name,skin_url,skin_outfit,tables_max from users where serial = " + str(serial) ) cursor.execute(sql) if cursor.rowcount != 1: self.error("getPlayerInfo(%d) expected one row got %d" % ( serial, cursor.rowcount )) return placeholder - (locale,name,skin_url,skin_outfit) = cursor.fetchone() + (locale,name,skin_url,skin_outfit,tables_max) = cursor.fetchone() if skin_outfit == None: skin_outfit = "random" cursor.close() packet = PacketPokerPlayerInfo(serial = serial, name = name, url = skin_url, - outfit = skin_outfit) + outfit = skin_outfit, + tables_max = tables_max) # pokerservice generally provides playerInfo() internally to # methods like pokeravatar.(re)?login. Since this is the central # internal location where the query occurs, we hack in the locale Index: pokernetwork/pokeravatar.py =================================================================== --- pokernetwork/pokeravatar.py (révision 6257) +++ pokernetwork/pokeravatar.py (copie de travail) -131,6 +131,7 @@ self.user.privilege = User.REGULAR self.user.url = player_info.url self.user.outfit = player_info.outfit + self.user.tablesMax = player_info.tables_max self._setDefaultLocale(player_info.locale) if self.explain: -140,10 +141,11 @@ self.loginTableUpdates(serial) def login(self, info): - (serial, name, privilege) = info + (serial, name, privilege, tables_max) = info self.user.serial = serial self.user.name = name self.user.privilege = privilege + self.user.tablesMax = tables_max player_info = self.service.getPlayerInfo(serial) self.user.url = player_info.url -224,6 +226,9 @@ def getName(self): return self.user.name + def getTablesMax(self): + return self.user.tablesMax + def getUrl(self): return self.user.url -1061,7 +1066,8 @@ return PacketPokerPlayerInfo(serial = self.getSerial(), name = self.getName(), url = self.user.url, - outfit = self.user.outfit) + outfit = self.user.outfit, + tables_max = self.user.tablesMax) else: return PacketError(code = PacketPokerGetPlayerInfo.NOT_LOGGED, message = "Not logged in", Index: pokernetwork/pokertable.py =================================================================== --- pokernetwork/pokertable.py (révision 6257) +++ pokernetwork/pokertable.py (copie de travail) -35,6 +35,7 @@ from types import * from string import split, join import time +import datetime import traceback from pokerengine.pokergame import PokerGameServer, history2messages -132,6 +133,14 @@ self.cache = self.createCache() self.owner = 0 self.avatar_collection = PokerAvatarCollection("Table%d" % id, factory.verbose) + self.timeBeforeYouCanRebuyMinProps = settings.headerGetProperties("/server/time-before-you-can-rebuy-min") + self.isTimeBeforeYouCanRebuyMin= False + if len(self.timeBeforeYouCanRebuyMinProps) != 0: + if self.timeBeforeYouCanRebuyMinProps[0].get("activate") == "yes": + self.isTimeBeforeYouCanRebuyMin= True + self.timeBeforeYouCanRebuyMin = int (self.timeBeforeYouCanRebuyMinProps[0].get("period", 1800)) + + self.serial2leavetime = {} # key : serial ; value : [ time , money ] self.timer_info = { "playerTimeout": None, "playerTimeoutSerial": 0, -973,6 +982,9 @@ # # If not on a closed table, stand up # + if(not self.game.isTournament() and self.isTimeBeforeYouCanRebuyMin and (self.game.minMoney() < self.game.serial2player[serial].money)): + self.serial2leavetime[serial] = [ time.time() , self.game.serial2player[serial].money ] + if self.isOpen(): if avatar.removePlayer(self, serial): self.seated2observer(avatar) -1193,12 +1205,25 @@ return False # Next, test to see if joining this table will cause the avatar to - # exceed the maximum permitted by the server. - if len(avatar.tables) >= self.factory.simultaneous: + # exceed the maximum permitted by the server + clientTablesLen = len(avatar.tables) + if clientTablesLen >= self.factory.simultaneous: if self.factory.verbose: self.error("joinPlayer: %d seated at %d tables (max %d)" % ( serial, len(avatar.tables), self.factory.simultaneous )) + avatar.sendPacketVerbose(PacketPokerError(message = "You have reached the maximum number of tables available by the server (%d)" % (self.factory.simultaneous ), + code=100 )) return False + + # Next, test to see if joining this table will cause the avatar to + # exceed the maximum permitted by the maximum specified for him + if avatar.getTablesMax() != -1 and clientTablesLen >= avatar.getTablesMax(): + if self.factory.verbose: + self.error("joinPlayer: %d seated at %d tables (specific user max %d)" % ( serial, len(avatar.tables), avatar.getTablesMax())) + avatar.sendPacketVerbose(PacketPokerError(message = "You have reached the maximum number of tables available with your access (%d)" % (avatar.getTablesMax() ), + code=101 )) + return False + # # Player is now an observer, unless he is seated # at the table. -1335,6 +1360,17 @@ self.error("player %d already payed the buy-in" % avatar.getSerial()) return False + if self.isTimeBeforeYouCanRebuyMin and self.serial2leavetime.has_key(avatar.getSerial()): + diff = int (time.time() - self.serial2leavetime[avatar.getSerial()][0]) + if ( diff < self.timeBeforeYouCanRebuyMin ) and self.serial2leavetime[avatar.getSerial()][1] > amount : + rest = self.timeBeforeYouCanRebuyMin - diff + self.error("player %d can't for the next %d secondes buyin less than %d " % (avatar.getSerial(), rest, self.serial2leavetime[avatar.getSerial()][1] ) ) + avatar.sendPacketVerbose(PacketPokerError(message = "You can't for the next %d secondes buyin less than %d " % (rest, self.serial2leavetime[avatar.getSerial()][1] ), + code=102 )) + return False + else: + del self.serial2leavetime[avatar.getSerial()] + amount = self.factory.buyInPlayer(avatar.getSerial(), game.id, self.currency_serial, max(amount, game.buyIn())) return avatar.setMoney(self, amount) Index: pokernetwork/pokerauth.py =================================================================== --- pokernetwork/pokerauth.py (révision 6257) +++ pokernetwork/pokerauth.py (copie de travail) -52,11 +52,12 @@ def auth(self, name, password): cursor = self.db.cursor() - cursor.execute("SELECT serial, password, privilege FROM users " + cursor.execute("SELECT serial, password, privilege, tables_max FROM users " "WHERE name = '%s'" % name) numrows = int(cursor.rowcount) serial = 0 privilege = User.REGULAR + tables_max = -1 if numrows <= 0: if self.auto_create_account: if self.verbose > 1: -73,13 +74,13 @@ cursor.close() return ( False, "Invalid login or password" ) else: - (serial, password_sql, privilege) = cursor.fetchone() + (serial, password_sql, privilege, tables_max) = cursor.fetchone() cursor.close() if password_sql != password: self.message("password mismatch for %s" % name) return ( False, "Invalid login or password" ) - return ( (serial, name, privilege), None ) + return ( (serial, name, privilege, tables_max), None ) def userCreate(self, name, password): if self.verbose: Index: pokernetwork/user.py =================================================================== --- pokernetwork/user.py (révision 6257) +++ pokernetwork/user.py (copie de travail) -73,6 +73,7 @@ self.url = "random" self.outfit = "random" self.privilege = None + self.tablesMax = -1 def logout(self): self.serial = 0 -80,6 +81,7 @@ self.url = "random" self.outfit = "random" self.privilege = None + self.tablesMax = -1 def isLogged(self): return not self.serial == 0 Index: tests/test-pokeravatar.py.in =================================================================== --- tests/test-pokeravatar.py.in (révision 6257) +++ tests/test-pokeravatar.py.in (copie de travail) -1170,7 +1170,7 @@ def playerInfoUnpriv(self, (client, packet)): return self.pingThenExpectPrivilegeFailure((client, packet), PacketPokerPlayerInfo(serial= client.getSerial(), name = "The Naked Guy", - outfit = "Naked", url = "http://example.org")) + outfit = "Naked", url = "http://example.org", tables_max = -1)) # ------------------------------------------------------------------------- def test17_4_tourneyTourneyRegisterUnpriv(self): self.createClients(1) -1206,7 +1206,7 @@ 'packet': PacketPokerPlayerInfo(serial = someoneElseSerial, name = "YOU_BEEN_CRACKED", - url = "http://example.com/myhack", outfit = "Naked") }, + url = "http://example.com/myhack", outfit = "Naked", tables_max = -1) }, 'player_image' : { 'output' : "%sattempt to set player image%s" \ % (messageStart, forPlayerByPlayer), -1789,7 +1789,8 @@ avatar.handlePacketLogic(PacketPokerPlayerInfo(serial= client.getSerial(), name = "The Naked Guy", outfit = "Naked", - url = "http://example.org")) + url = "http://example.org", + tables_max = -1)) found = False for packet in avatar.resetPacketsQueue(): if packet.type == PACKET_POKER_PLAYER_INFO: -1821,7 +1822,8 @@ avatar.handlePacketLogic(PacketPokerPlayerInfo(serial= client.getSerial(), name = "The Naked Guy", outfit = "Naked", - url = "http://example.org")) + url = "http://example.org", + tables_max = -1)) found = False for packet in avatar.resetPacketsQueue(): if packet.type == PACKET_ERROR: -2240,7 +2242,7 @@ avatar0 = self.service.avatars[0] avatar0.logout() table.observers.append(avatar0) - avatar0.login((4, "user0", 32767)) + avatar0.login((4, "user0", 32767, -1)) avatar0.queuePackets() count = 0 for packet in avatar0.resetPacketsQueue(): -2295,7 +2297,7 @@ avatar0 = self.service.avatars[0] avatar0.logout() table.observers.append(avatar0) - avatar0.login((4, "user0", 32767)) + avatar0.login((4, "user0", 32767,-1)) avatar0.queuePackets() count = 0 for packet in avatar0.resetPacketsQueue(): -4036,6 +4038,7 @@ mpiSelf.outfit = "naked" mpiSelf.locale = 'mylocale' mpiSelf.name = 'Doyle Brunson' + mpiSelf.tables_max = -1 class MockService: def __init__(msSelf): msSelf.verbose = 6 Index: tests/test-pokerclient.py.in =================================================================== --- tests/test-pokerclient.py.in (révision 6257) +++ tests/test-pokerclient.py.in (copie de travail) -1097,7 +1097,8 @@ client.handlePlayerInfo(PacketPokerPlayerInfo(name = "test", url = "http://thatisone/", outfit = "Stablize", - serial = client.getSerial())) + serial = client.getSerial(), + tables_max = -1)) if forceCrash: self.assertEquals(get_messages(), ['ERROR *CRITICAL*: PACKET_POKER_PLAYER_INFO: may enter loop packet.url = http://thatisone/\n url = http://thatistwo\n url_check = http://thatisthree\npacket.outfit = Stablize\n outfit = Stablize\n outfit_check = Stablize']) -1141,7 +1142,8 @@ client.handlePlayerInfo(PacketPokerPlayerInfo(name = "test", url = "http://stable/", outfit = "OutfitOne", - serial = client.getSerial())) + serial = client.getSerial(), + tables_max = -1)) if forceCrash: self.assertEquals(get_messages(), ['ERROR *CRITICAL*: PACKET_POKER_PLAYER_INFO: may enter loop packet.url = http://stable/\n url = http://stable/\n url_check = http://stable/\npacket.outfit = OutfitOne\n outfit = OutfitTwo\n outfit_check = OutfitThree']) Index: tests/conf/poker.server.xml.in =================================================================== --- tests/conf/poker.server.xml.in (révision 6257) +++ tests/conf/poker.server.xml.in (copie de travail) -8,6 +8,8 @@ chat="yes" > + +
Index: tests/test-pokertable.py.in =================================================================== --- tests/test-pokertable.py.in (révision 6257) +++ tests/test-pokertable.py.in (copie de travail) -62,6 +62,8 @@ + + @POKER_ENGINE_PKGSYSCONFDIR@ @POKER_NETWORK_PKGSYSCONFDIR@ -70,6 +72,8 @@ + + 9c 9d 9h Ts Tc Td Th Ts Jc Jd Jh Js Qc Qd Qh Qs Kc Kd Kh Ks Ac Ad Ah As -152,6 +156,9 @@ self.joined_max = 1000 self.chat_messages = [] + def setSimultaneous(self, tables_max): + self.simultaneous = tables_max + def getMissedRoundMax(self): return 5 # if you change this, change it in settings_xml above -330,6 +337,7 @@ self.user = MockClient.User() self.testObject = testObject self.reasonExpected = expectedReason + self.tables_max = -1 def __str__(self): return "MockClient of Player%d" % self.serial -414,7 +422,15 @@ self.name = self.player.getName() self.url = "http://fake" self.outfit = None + self.tables_max = -1 return MockPlayerInfo(self) + + def getTablesMax(self): + return self.tables_max + + def setTablesMax(self, table_max): + self.tables_max = table_max + if verbose < 0: redirect_messages(MockClient) -654,9 +670,18 @@ self.assertEqual(True, self.table.rebuyPlayerRequest(player[5], \ self.table.game.maxBuyIn())) - # finally, player5 tries to join table 2, which isn't permitted since + # now, player5 tries to join table 2, which isn't permitted since # we've set MockService.simultaneous to 1 self.assertEqual(False, self.table2.joinPlayer(player[5], 5)) + + # finally, apply simultaneous = 2, player5 tries to join table 2, which isn't permitted since + # we've set tablesMax for specific user to 1 + self.service.setSimultaneous(2) + player[5].setTablesMax(1) + self.assertEqual(False, self.table2.joinPlayer(player[5], 5)) + player[5].setTablesMax(2) + self.assertEqual(True, self.table2.joinPlayer(player[5], 5)) + # ------------------------------------------------------------------- def test08_2_brokenSeatFactory(self): player = self.createPlayer(1, False) -1427,6 +1452,18 @@ self.tableSave = self.table return deferredMustBeCalledBackForSuccess + # ------------------------------------------------------------------- + def test47_timeBeforeYouCanRebuyMin(self): + # note : createPlayer apply maxBuyIn + p = self.createPlayer(1) + self.table.quitPlayer(p, 1) + self.table.joinPlayer(p, p.serial) + self.table.seatPlayer(p, p.serial, -1) + if self.table.game.isTournament() == False: + self.assertEqual(False,self.table.buyInPlayer(p, self.table.game.minMoney())) + time.sleep(2) + self.assertEqual(True,self.table.buyInPlayer(p, self.table.game.minMoney())) + # ------------------------------------------------------------------- # I seriously considered not having *all* the same tests run with -1846,6 +1883,11 @@ """SKIP THIS TEST IN THIS SUBCLASS """ return True + # ------------------------------------------------------------------- + def test47_timeBeforeYouCanRebuyMin(self): + """SKIP THIS TEST IN THIS SUBCLASS + """ + return True # -------------------------------------------------------------------------------- class MockServiceWithUserStats(MockService): def __init__(self, settings): Index: tests/test-pokerservice.py.in =================================================================== --- tests/test-pokerservice.py.in (révision 6257) +++ tests/test-pokerservice.py.in (copie de travail) -221,9 +221,9 @@ cursor.execute("INSERT INTO users (name, password, created) VALUES ('user%d', 'password%d', 0)" % ( user_number, user_number )) self.assertEqual(1, cursor.rowcount) - ( (self.user1_serial, name, privilege), message ) = self.service.auth("user1", "password1", "role1") - ( (self.user2_serial, name, privilege), message ) = self.service.auth("user2", "password2", "role1") - ( (self.user3_serial, name, privilege), message ) = self.service.auth("user3", "password3", "role1") + ( (self.user1_serial, name, privilege, tables_max), message ) = self.service.auth("user1", "password1", "role1") + ( (self.user2_serial, name, privilege, tables_max), message ) = self.service.auth("user2", "password2", "role1") + ( (self.user3_serial, name, privilege, tables_max), message ) = self.service.auth("user3", "password3", "role1") for user_number in (self.user1_serial, self.user2_serial, self.user3_serial): if self.default_money > 0 and user_number == self.user3_serial: -1321,7 +1321,7 @@ # ---------------------------------------------------------------- def test01_auth(self): self.service.startService() - ( (serial, name, privilege), message ) = self.service.auth("user1", "password1", "role1") + ( (serial, name, privilege, tables_max), message ) = self.service.auth("user1", "password1", "role1") self.assertEquals(None, message) self.assertEquals(4, serial) self.assertEquals("user1", name) -1344,9 +1344,9 @@ return "user1" self.service.startService() - ( (serial, name, privilege), message ) = self.service.auth("user1", "password1", sets.Set('role1')) + ( (serial, name, privilege, tables_max), message ) = self.service.auth("user1", "password1", sets.Set('role1')) self.service.avatar_collection.add(serial, Client()) - ( (serial, name, privilege), message ) = self.service.auth("user1", "password1", sets.Set('role1')) + ( (serial, name, privilege, tables_max), message ) = self.service.auth("user1", "password1", sets.Set('role1')) self.assertEquals(None, message) self.assertEquals("user1", name) -1984,7 +1984,7 @@ def test_refill(self): self.service.startService() refill = 10000 - ( (serial, name, privilege), message ) = self.service.auth("user1", "password1", "role1") + ( (serial, name, privilege, tables_max), message ) = self.service.auth("user1", "password1", "role1") self.assertEquals(0, self.service.autorefill(serial)) table_money = 1000 table_serial = 200 -4497,7 +4497,7 @@ found = True break cursorSelf.rowcount = 1 - cursorSelf.row = ('ourlocal','ourname','ourskinurl',None) + cursorSelf.row = ('ourlocal','ourname','ourskinurl',None,-1) self.failUnless(found) return cursorSelf.rowcount def fetchone(cursorSelf): return cursorSelf.row -4519,6 +4519,7 @@ self.assertEquals(pack.name, 'ourname') self.assertEquals(pack.url, 'ourskinurl') self.assertEquals(pack.outfit, 'random') + self.assertEquals(pack.tables_max, -1) self.service.db = oldDb # ---------------------------------------------------------------- -5324,6 +5325,7 @@ self.assertEquals(packet.name, "anonymous") self.assertEquals(packet.url, "random") self.assertEquals(packet.outfit, "random") + self.assertEquals(packet.tables_max, -1) # FIXME_PokerPlayerInfoLocale: (see also sr #2262 ) # PokerService.getPlayerInfo() sends locale argument when creating # the PokerPlayerInfo() packet, but that argument is not used. -5339,7 +5341,7 @@ self.failUnless(sql.find("serial = 235") > 0, "serial wrong") def __init__(cursorSelf): MockCursorBase.__init__(cursorSelf, self, - ["select locale,name,skin_url,skin_outfit from users"]) + ["select locale,name,skin_url,skin_outfit,tables_max from users"]) self.service = pokerservice.PokerService(self.settings) oldDb = self.service.db -5354,6 +5356,7 @@ self.assertEquals(packet.name, "anonymous") self.assertEquals(packet.url, "random") self.assertEquals(packet.outfit, "random") + self.assertEquals(packet.tables_max, -1) # FIXME_PokerPlayerInfoLocale: (see also sr #2262 ) # PokerService.getPlayerInfo() sends locale argument when creating # the PokerPlayerInfo() packet, but that argument is not used. Index: tests/poker.server.xml =================================================================== --- tests/poker.server.xml (révision 6257) +++ tests/poker.server.xml (copie de travail) -6,6 +6,8 @@ verbose="3" chat="yes" > + +
Index: tests/test-tourneytablebalance.py.in =================================================================== --- tests/test-tourneytablebalance.py.in (révision 6257) +++ tests/test-tourneytablebalance.py.in (copie de travail) -121,6 +121,7 @@ miSelf.name = "PLAYER INFO: %d" % self.serial miSelf.url = "http://example.org" miSelf.outfit = "naked" + miSelf.tables_max = -1 return MockInfo() def sendPacket(self, packet): Index: tests/test-pokerauth.py.in =================================================================== --- tests/test-pokerauth.py.in (révision 6257) +++ tests/test-pokerauth.py.in (copie de travail) -149,7 +149,7 @@ auth = pokerauth.get_auth_instance(db, settings) clear_all_messages() - self.assertEquals(auth.auth('joe_schmoe', 'foo'), ((4, 'joe_schmoe', 1), None)) + self.assertEquals(auth.auth('joe_schmoe', 'foo'), ((4, 'joe_schmoe', 1, -1), None)) self.assertEquals(get_messages(), ['user joe_schmoe does not exist, create it', 'creating user joe_schmoe', 'create user with serial 4']) self.failUnless(len(self.checkIfUserExistsInDB('joe_schmoe')) == 1) -174,6 +174,7 @@ cursor.execute("""CREATE TABLE users ( serial int unsigned not null auto_increment, name varchar(32), password varchar(32), privilege int default 1, + tables_max int default -1, primary key (serial))""") for ii in [ 1 , 2 ]: cursor.execute("INSERT INTO users (name, password) values ('%s', '%s')" % -198,7 +199,7 @@ auth = pokerauth.get_auth_instance(self.db, self.settings) clear_all_messages() - self.assertEquals(auth.auth('dan_harrington', 'bar'), ((4L, 'dan_harrington', 1L), None)) + self.assertEquals(auth.auth('dan_harrington', 'bar'), ((4L, 'dan_harrington', 1L, -1), None)) self.assertEquals(get_messages(), []) clear_all_messages() Index: database/1.7.5-2.0.0.sql =================================================================== --- database/1.7.5-2.0.0.sql (révision 6257) +++ database/1.7.5-2.0.0.sql (copie de travail) -1,3 +1,6 @@ --- resthost must persist -ALTER table resthost ENGINE=MyIsam; -ALTER table route ENGINE=MyIsam; +UPDATE server SET version = '2.0.0'; + +-- max tables allowed , no check if -1 +ALTER TABLE `users` ADD `tables_max` INT UNSIGNED DEFAULT -1; + + Index: database/schema.sql.in =================================================================== --- database/schema.sql.in (révision 6257) +++ database/schema.sql.in (copie de travail) -60,13 +60,15 @@ password VARCHAR(32), -- 1 is a regular player, 0 is an observer and cannot play, 2 is admin privilege INT DEFAULT 1, + -- max tables allowed , no check if -1 + tables_max INT DEFAULT -1, -- locale locale VARCHAR(32) DEFAULT "en_US", rating INT DEFAULT 1000, future_rating FLOAT DEFAULT 1000, games_count INT DEFAULT 0, - + PRIMARY KEY (serial), KEY name_idx (name), UNIQUE KEY email_idx (email)