some hotfixes

This commit is contained in:
2026-03-21 01:43:46 +01:00
parent edc065ca0c
commit 101820581e
9 changed files with 286 additions and 28 deletions
+18 -8
View File
@@ -7,20 +7,20 @@ $host = 'localhost'; $db = 'poker_paf'; $user = 'root'; $pass = '';
$pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass);
$game_id = $_GET['game_id'] ?? 0;
// On stocke l'état précédent pour ne pas envoyer de doublons
$last_state_hash = "";
while (true) {
// On récupère l'état global de la partie et des joueurs
// 1. Récupérer les données de la partie
$stmt = $pdo->prepare("SELECT g.*, (SELECT COUNT(*) FROM players WHERE game_id = g.id AND is_folded=0) as active_count FROM games g WHERE g.id = ?");
$stmt->execute([$game_id]);
$game = $stmt->fetch(PDO::FETCH_ASSOC);
// 2. Récupérer les données des joueurs
$stmt = $pdo->prepare("SELECT * FROM players WHERE game_id = ?");
$stmt->execute([$game_id]);
$players = $stmt->fetchAll(PDO::FETCH_ASSOC);
$full_state = ['game' => $game, 'players' => $players];
// 3. Typage propre AVANT de mettre dans le full_state
foreach ($players as &$player) {
$player['id'] = (int)$player['id'];
$player['money'] = (int)$player['money'];
@@ -28,16 +28,26 @@ while (true) {
$player['is_dealer'] = (int)$player['is_dealer'];
$player['is_folded'] = (int)$player['is_folded'];
}
unset($player); // Nettoyage de la référence
unset($player);
// 4. Construction de l'objet final
$full_state = [
'game' => $game,
'players' => $players
];
// 5. Calcul du hash sur l'objet finalisé
$current_hash = md5(json_encode($full_state));
// Si le hash a changé, c'est qu'une action a eu lieu (mise, tour suivant, fold...)
if ($current_hash !== $last_state_hash) {
echo "data: " . json_encode($full_state) . "\n\n";
$last_state_hash = $current_hash;
// On force l'envoi
ob_flush();
flush();
}
ob_flush();
flush();
sleep(0.01); // On vérifie toutes les secondes
// 6. Pause raisonnable (500ms) pour ne pas tuer le CPU/Base de données
sleep(0.01);
}