commit c129da1e5c81024b5d43f8cd64e6896044a3042f
parent ed100a21db164ee762425a5ec6e6748d21f682e1
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Thu, 17 Mar 2011 10:13:14 +0100
Modification du serveur pour qu'il fournisse les scores sans planter lors d'un set_partie d'une partie déjà jouée.
Diffstat:
2 files changed, 44 insertions(+), 12 deletions(-)
diff --git 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
@@ -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);
}