.BANCHO. .FIX. Add user stats cache and user stats request packet

This commit is contained in:
Nyo
2016-06-16 13:38:17 +02:00
parent b5806bdfbf
commit 7035743362
15 changed files with 203 additions and 63 deletions

View File

@@ -4,7 +4,7 @@ from helpers import packetHelper
from constants import slotStatuses
""" General packets """
""" Users listing packets """
def userActionChange(stream):
return packetHelper.readPacketData(stream,
[
@@ -15,6 +15,9 @@ def userActionChange(stream):
["gameMode", dataTypes.byte]
])
def userStatsRequest(stream):
return packetHelper.readPacketData(stream, [["users", dataTypes.intList]])
""" Client chat packets """

View File

@@ -10,3 +10,4 @@ sInt64 = 6
string = 7
ffloat = 8 # because float is a keyword
bbytes = 9
intList = 10 # TODO: Maybe there are some packets that still use uInt16 + uInt32 thing somewhere.

View File

@@ -90,16 +90,17 @@ def userLogout(userID):
def userPanel(userID):
# Get user data
userToken = glob.tokens.getTokenFromUserID(userID)
username = userHelper.getUsername(userID)
username = userToken.username
timezone = 24 # TODO: Timezone
country = userToken.getCountry()
gameRank = userHelper.getGameRank(userID, userToken.gameMode)
country = userToken.country
gameRank = userToken.gameRank
latitude = userToken.getLatitude()
longitude = userToken.getLongitude()
# Get username color according to rank
# Only admins and normal users are currently supported
rank = userHelper.getRankPrivileges(userID)
#rank = userHelper.getRankPrivileges(userID)
rank = userToken.rank
if username == "FokaBot":
userRank = userRanks.MOD
elif rank == 4:
@@ -111,7 +112,6 @@ def userPanel(userID):
else:
userRank = userRanks.NORMAL
return packetHelper.buildPacket(packetIDs.server_userPanel,
[
[userID, dataTypes.sInt32],
@@ -128,16 +128,15 @@ def userPanel(userID):
def userStats(userID):
# Get userID's token from tokens list
userToken = glob.tokens.getTokenFromUserID(userID)
# Get stats from DB
# TODO: Caching system
rankedScore = userHelper.getRankedScore(userID, userToken.gameMode)
accuracy = userHelper.getAccuracy(userID, userToken.gameMode)/100
playcount = userHelper.getPlaycount(userID, userToken.gameMode)
totalScore = userHelper.getTotalScore(userID, userToken.gameMode)
gameRank = userHelper.getGameRank(userID, userToken.gameMode)
pp = int(userHelper.getPP(userID, userToken.gameMode))
if userToken == None:
return bytes() # NOTE: ???
# Stats are cached in token object
#rankedScore = userHelper.getRankedScore(userID, userToken.gameMode)
#accuracy = userHelper.getAccuracy(userID, userToken.gameMode)/100
#playcount = userHelper.getPlaycount(userID, userToken.gameMode)
#totalScore = userHelper.getTotalScore(userID, userToken.gameMode)
#gameRank = userHelper.getGameRank(userID, userToken.gameMode)
#pp = int(userHelper.getPP(userID, userToken.gameMode))
return packetHelper.buildPacket(packetIDs.server_userStats,
[
[userID, dataTypes.uInt32],
@@ -147,12 +146,12 @@ def userStats(userID):
[userToken.actionMods, dataTypes.sInt32],
[userToken.gameMode, dataTypes.byte],
[0, dataTypes.sInt32],
[rankedScore, dataTypes.uInt64],
[accuracy, dataTypes.ffloat],
[playcount, dataTypes.uInt32],
[totalScore, dataTypes.uInt64],
[gameRank, dataTypes.uInt32],
[pp, dataTypes.uInt16]
[userToken.rankedScore, dataTypes.uInt64],
[userToken.accuracy, dataTypes.ffloat],
[userToken.playcount, dataTypes.uInt32],
[userToken.totalScore, dataTypes.uInt64],
[userToken.gameRank, dataTypes.uInt32],
[userToken.pp, dataTypes.uInt16]
])