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" >
<delays autodeal="3" round="2" position="1" showdown="5" finish="3" />
+ <!-- remaining buy-in -->
+ <remaining-buy-in activate="yes" period="1800" />
<table name="One" variant="holdem" betting_structure="2-4-limit" seats="10" timeout="60" custom_money="0" />
<table name="Two" variant="holdem" betting_structure="10-15-limit" seats="10" timeout="60" custom_money="0" />
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 @@
<server verbose="4" autodeal="yes" max_missed_round="5">
<delays autodeal_tournament_min="2" autodeal="2" autodeal_max="2" autodeal_check="0" round="0" position="0" showdown="0" finish="0" />
+ <time-before-you-can-rebuy-min activate="yes" period="1" />
+
<path>@POKER_ENGINE_PKGSYSCONFDIR@ @POKER_NETWORK_PKGSYSCONFDIR@</path>
<users temporary="BOT"/>
</server>
-70,6 +72,8 @@
<server verbose="4" autodeal="no" >
<delays autodeal_tournament_min="2" autodeal="2" autodeal_max="2" autodeal_check="0" round="0" position="0" showdown="0" finish="0" />
+ <time-before-you-can-rebuy-min activate="yes" period="1" />
+
<decks>
<deck>9c 9d 9h Ts Tc Td Th Ts Jc Jd Jh Js Qc Qd Qh Qs Kc Kd Kh Ks Ac Ad Ah As</deck>
</decks>
-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" >
+ <time-before-you-can-rebuy-min activate="yes" period="1800" />
+
<delays autodeal="3" round="2" position="1" showdown="7" finish="3" />
<table name="Fourty" variant="7stud" betting_structure="ante-5-10-limit" seats="8" player_timeout="60" custom_money="0" />
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)