From c129da1e5c81024b5d43f8cd64e6896044a3042f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Thu, 17 Mar 2011 10:13:14 +0100 Subject: [PATCH] =?UTF-8?q?Modification=20du=20serveur=20pour=20qu'il=20fo?= =?UTF-8?q?urnisse=20les=20scores=20sans=20planter=20lors=20d'un=20set=5Fp?= =?UTF-8?q?artie=20d'une=20partie=20d=C3=A9j=C3=A0=20jou=C3=A9e.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/serveur/php/pticlic.php | 44 +++++++++++++++++++++++++++++++++++- code/serveur/php/server.php | 12 +--------- 2 files changed, 44 insertions(+), 12 deletions(-) diff --git a/code/serveur/php/pticlic.php b/code/serveur/php/pticlic.php index d55be19..3ae0027 100644 --- a/code/serveur/php/pticlic.php +++ b/code/serveur/php/pticlic.php @@ -24,6 +24,7 @@ require_once("db.php"); * normalizeProbas($row); * setGame($user, $pgid, $gid, $answers); * get_game_relations(); +* setGameGetScore($pgid, $gid, $answers); */ @@ -526,7 +527,7 @@ function setGame($user, $pgid, $gid, $answers) { $db = getDB(); 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."';")); @@ -575,6 +576,32 @@ function setGame($user, $pgid, $gid, $answers) $db->exec("commit;"); $scores['total'] = $gameScore; $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; } @@ -597,4 +624,19 @@ function get_game_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 "}"; +} ?> diff --git a/code/serveur/php/server.php b/code/serveur/php/server.php index b66aafb..7dd43ac 100644 --- a/code/serveur/php/server.php +++ b/code/serveur/php/server.php @@ -70,17 +70,7 @@ function main() } // 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. - $scores = setGame($user, intval($_GET['pgid']), intval($_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 "}"; + setGameGetScore($_GET['pgid'], $_GET['gid'], $_GET); } else { throw new Exception("Commande inconnue", 2); }