Modification du serveur pour qu'il fournisse les scores sans planter lors d'un set_partie d'une partie déjà jouée.
This commit is contained in:
parent
ed100a21db
commit
c129da1e5c
|
@ -24,6 +24,7 @@ require_once("db.php");
|
||||||
* normalizeProbas($row);
|
* normalizeProbas($row);
|
||||||
* setGame($user, $pgid, $gid, $answers);
|
* setGame($user, $pgid, $gid, $answers);
|
||||||
* get_game_relations();
|
* get_game_relations();
|
||||||
|
* setGameGetScore($pgid, $gid, $answers);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -526,7 +527,7 @@ function setGame($user, $pgid, $gid, $answers)
|
||||||
{
|
{
|
||||||
$db = getDB();
|
$db = getDB();
|
||||||
if ('ok' !== $db->querySingle("SELECT 'ok' FROM played_game WHERE pgid = $pgid and $gid = $gid and login = '$user' and timestamp = -1;")) {
|
if ('ok' !== $db->querySingle("SELECT 'ok' FROM played_game WHERE pgid = $pgid and $gid = $gid and login = '$user' and timestamp = -1;")) {
|
||||||
throw new Exception("Cette partie n'est associée à votre nom d'utilisateur, ou bien vous l'avez déjà jouée.", 4);
|
return getGameScores($user, $pgid, $gid);
|
||||||
}
|
}
|
||||||
|
|
||||||
$userReputation = computeUserReputation($db->querySingle("SELECT score FROM user WHERE login='".$user."';"));
|
$userReputation = computeUserReputation($db->querySingle("SELECT score FROM user WHERE login='".$user."';"));
|
||||||
|
@ -575,6 +576,32 @@ function setGame($user, $pgid, $gid, $answers)
|
||||||
$db->exec("commit;");
|
$db->exec("commit;");
|
||||||
$scores['total'] = $gameScore;
|
$scores['total'] = $gameScore;
|
||||||
$scores['nb'] = $nbScores;
|
$scores['nb'] = $nbScores;
|
||||||
|
$scores['alreadyPlayed'] = 0;
|
||||||
|
return $scores;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getGameScores($user, $pgid, $gid) {
|
||||||
|
$db = getDB();
|
||||||
|
$timestamp = $db->querySingle("SELECT timestamp FROM played_game WHERE pgid = $pgid and $gid = $gid and login = '$user';");
|
||||||
|
if (timestamp == -1) {
|
||||||
|
throw new Exception("Cette partie n'a jamais été jouée.", 4); // TODO : code d'erreur en doublon avec celui ci-dessous.
|
||||||
|
} else if ($timestamp == null) {
|
||||||
|
throw new Exception("Cette partie n'est associée à votre nom d'utilisateur.", 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
$gameScore = 0;
|
||||||
|
$scores = array();
|
||||||
|
$nbScores = 0;
|
||||||
|
$res = $db->query("SELECT num,score from played_game_cloud where pgid = $pgid and gid = $gid;");
|
||||||
|
while ($row = $res->fetchArray())
|
||||||
|
{
|
||||||
|
$nbScores++;
|
||||||
|
$gameScore += $row['score'];
|
||||||
|
$scores[$row['num'] = $row['score'];
|
||||||
|
}
|
||||||
|
$scores['total'] = $gameScore;
|
||||||
|
$scores['nb'] = $nbScores;
|
||||||
|
$scores['alreadyPlayed'] = 1;
|
||||||
return $scores;
|
return $scores;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -597,4 +624,19 @@ function get_game_relations()
|
||||||
|
|
||||||
return $relations;
|
return $relations;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setGameGetScore($pgid, $gid, $answers) {
|
||||||
|
$scores = setGame($user, intval($pgid), intval($gid), $answers);
|
||||||
|
// On renvoie une nouvelle partie pour garder le client toujours bien alimenté.
|
||||||
|
echo '{"scoreTotal":'.$scores['total'];
|
||||||
|
echo ',"alreadyPlayed":'.$scores['alreadyPlayed'];
|
||||||
|
echo ',"scores":[';
|
||||||
|
for ($i = 0; $i < $scores['nb']; $i++) {
|
||||||
|
if ($i != 0) echo ',';
|
||||||
|
echo $scores[$i];
|
||||||
|
}
|
||||||
|
echo "],\"newGame\":";
|
||||||
|
echo json_encode("".game2json($user, randomGame()));
|
||||||
|
echo "}";
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -70,17 +70,7 @@ function main()
|
||||||
}
|
}
|
||||||
// TODO : il faudrait filtrer les paramètres qui correspondent à une réponse
|
// TODO : il faudrait filtrer les paramètres qui correspondent à une réponse
|
||||||
// au lieu d'envoyer $_GET en entier, mais on ne connaît pas leur nom à l'avance.
|
// au lieu d'envoyer $_GET en entier, mais on ne connaît pas leur nom à l'avance.
|
||||||
$scores = setGame($user, intval($_GET['pgid']), intval($_GET['gid']), $_GET);
|
setGameGetScore($_GET['pgid'], $_GET['gid'], $_GET);
|
||||||
// On renvoie une nouvelle partie pour garder le client toujours bien alimenté.
|
|
||||||
echo "{\"scoreTotal\":".$scores['total'];
|
|
||||||
echo ',"scores":[';
|
|
||||||
for ($i = 0; $i < $scores['nb']; $i++) {
|
|
||||||
if ($i != 0) echo ',';
|
|
||||||
echo $scores[$i];
|
|
||||||
}
|
|
||||||
echo "],\"newGame\":";
|
|
||||||
echo json_encode("".game2json($user, randomGame()));
|
|
||||||
echo "}";
|
|
||||||
} else {
|
} else {
|
||||||
throw new Exception("Commande inconnue", 2);
|
throw new Exception("Commande inconnue", 2);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user