feat(tournaments/round_robin): broadcast scores every round

This commit was merged in pull request #13.
This commit is contained in:
2025-12-31 16:47:50 -05:00
committed by GitHub
Unverified
2 changed files with 19 additions and 13 deletions

View File

@@ -11,7 +11,6 @@ use tracing::{error, info};
// TODO: Support reconnecting behaviors // TODO: Support reconnecting behaviors
// TODO: Other tournament types // TODO: Other tournament types
// TODO: Max move wait time // TODO: Max move wait time
// TODO: Show tournament scoreboard after every round of games
// TODO: Tiebreakers, guarantee some amount of going first // TODO: Tiebreakers, guarantee some amount of going first
// TODO: Send moves instantly, sleep only till waiting time // TODO: Send moves instantly, sleep only till waiting time

View File

@@ -115,27 +115,34 @@ impl Tournament for RoundRobin {
self.is_completed = true; self.is_completed = true;
} }
let clients_guard = server.clients.read().await;
let mut player_scores: Vec<(String, u32)> = Vec::new();
for (_, player_addr) in self.players.iter() {
let player = clients_guard.get(player_addr).unwrap().read().await;
let _ = send(&player.connection.clone(), "TOURNAMENT:END");
player_scores.push((player.username.clone(), player.score));
}
drop(clients_guard);
player_scores.sort_by(|a, b| b.1.cmp(&a.1));
let mut message = "TOURNAMENT:SCORES:".to_string();
for (player, score) in player_scores.iter() {
message.push_str(&format!("{},{}|", player, score))
}
message.pop();
server.broadcast_message_all_observers(&message).await;
if self.is_completed() { if self.is_completed() {
// Send scores // Send scores
let clients_guard = server.clients.read().await; let clients_guard = server.clients.read().await;
let mut player_scores: Vec<(String, u32)> = Vec::new();
for (_, player_addr) in self.players.iter() { for (_, player_addr) in self.players.iter() {
let mut player = clients_guard.get(player_addr).unwrap().write().await; let mut player = clients_guard.get(player_addr).unwrap().write().await;
let _ = send(&player.connection.clone(), "TOURNAMENT:END"); let _ = send(&player.connection.clone(), "TOURNAMENT:END");
player_scores.push((player.username.clone(), player.score));
player.score = 0; player.score = 0;
player.round_robin_id = 0; player.round_robin_id = 0;
} }
player_scores.sort_by(|a, b| b.1.cmp(&a.1));
let mut message = "TOURNAMENT:END:".to_string();
for (player, score) in player_scores.iter() {
message.push_str(&format!("{},{}|", player, score))
}
message.pop();
server.broadcast_message_all_observers(&message).await;
} else { } else {
// Create next matches // Create next matches
self.create_matches(&server.clients, &server.matches).await; self.create_matches(&server.clients, &server.matches).await;