chore: align reservation API naming and polling

This commit is contained in:
2026-02-04 15:28:31 +00:00
Unverified
parent 6fe7ae8c49
commit b7a37a99f0

View File

@@ -42,9 +42,6 @@ public partial class Connection : Node {
public event Action OnGetDataAcks; public event Action OnGetDataAcks;
public event Action OnSetDataAcks; public event Action OnSetDataAcks;
// Reservation system (admin-only server feature)
public event Action OnReservationAddAck;
public event Action OnReservationDeleteAck;
public event Action<List<(string player1, string player2)>> OnUpdatedReservations; public event Action<List<(string player1, string player2)>> OnUpdatedReservations;
public event Action OnWsConnectionSuccess; public event Action OnWsConnectionSuccess;
@@ -59,7 +56,6 @@ public partial class Connection : Node {
public TournamentType ActiveTournament { get; private set; } public TournamentType ActiveTournament { get; private set; }
public bool DemoMode { get; private set; } public bool DemoMode { get; private set; }
// (player1, player2) tuples as reported by the server.
public List<(string player1, string player2)> Reservations { get; private set; } = []; public List<(string player1, string player2)> Reservations { get; private set; } = [];
public List<(string, int)> PreviousMoves { get; private set; } = []; public List<(string, int)> PreviousMoves { get; private set; } = [];
@@ -108,10 +104,12 @@ public partial class Connection : Node {
OnWsConnectionSuccess?.Invoke(); OnWsConnectionSuccess?.Invoke();
UpdateGameList(); UpdateGameList();
UpdatePlayerList(); UpdatePlayerList();
GetReservations();
refreshGamePlayerListTimer = 5.0f; refreshGamePlayerListTimer = 5.0f;
} else if (refreshGamePlayerListTimer <= 0.0f) { } else if (refreshGamePlayerListTimer <= 0.0f) {
UpdateGameList(); UpdateGameList();
UpdatePlayerList(); UpdatePlayerList();
GetReservations();
refreshGamePlayerListTimer = 5.0f; refreshGamePlayerListTimer = 5.0f;
} else { } else {
refreshGamePlayerListTimer -= (float)delta; refreshGamePlayerListTimer -= (float)delta;
@@ -228,36 +226,21 @@ public partial class Connection : Node {
sendCommand("SET", "MAX_TIMEOUT:" + maxTimeout); sendCommand("SET", "MAX_TIMEOUT:" + maxTimeout);
} }
// Reservation commands (admin-only) public void AddReservation(string player1Username, string player2Username) {
public void ReservationAdd(string player1Username, string player2Username) {
if (!IsAdmin) return; if (!IsAdmin) return;
if (!isValidReservationUsername(player1Username) || !isValidReservationUsername(player2Username)) { sendCommand("RESERVATION", $"ADD:{player1Username},{player2Username}");
GD.PrintErr("Invalid username(s) for reservation.");
return;
}
sendCommand("RESERVATION", $"ADD:{player1Username.Trim()},{player2Username.Trim()}");
} }
public void ReservationDelete(string player1Username, string player2Username) { public void DeleteReservation(string player1Username, string player2Username) {
if (!IsAdmin) return; if (!IsAdmin) return;
if (!isValidReservationUsername(player1Username) || !isValidReservationUsername(player2Username)) { sendCommand("RESERVATION", $"DELETE:{player1Username},{player2Username}");
GD.PrintErr("Invalid username(s) for reservation.");
return;
}
sendCommand("RESERVATION", $"DELETE:{player1Username.Trim()},{player2Username.Trim()}");
} }
public void ReservationGet() { public void GetReservations() {
if (!IsAdmin) return; if (!IsAdmin) return;
sendCommand("RESERVATION", "GET"); sendCommand("RESERVATION", "GET");
} }
private static bool isValidReservationUsername(string username) {
if (string.IsNullOrWhiteSpace(username)) return false;
// Protocol delimiters used by the server.
return !username.Contains(":") && !username.Contains(",") && !username.Contains("|");
}
private void sendCommand(string header, string body = "") { private void sendCommand(string header, string body = "") {
if (!IsSocketOpen) { if (!IsSocketOpen) {
GD.PrintErr($"Cannot send {header}, socket is not open."); GD.PrintErr($"Cannot send {header}, socket is not open.");
@@ -321,7 +304,7 @@ public partial class Connection : Node {
IsAdmin = true; IsAdmin = true;
GetMoveWait(); GetMoveWait();
GetTournamentStatus(); GetTournamentStatus();
ReservationGet(); GetReservations();
OnBecomeAdmin?.Invoke(); OnBecomeAdmin?.Invoke();
} }
@@ -428,7 +411,6 @@ public partial class Connection : Node {
var p1 = users[0]; var p1 = users[0];
var p2 = users[1]; var p2 = users[1];
Reservations.Add((p1, p2)); Reservations.Add((p1, p2));
OnReservationAddAck?.Invoke();
OnUpdatedReservations?.Invoke(new List<(string player1, string player2)>(Reservations)); OnUpdatedReservations?.Invoke(new List<(string player1, string player2)>(Reservations));
break; break;
} }
@@ -441,7 +423,6 @@ public partial class Connection : Node {
var p1 = users[0]; var p1 = users[0];
var p2 = users[1]; var p2 = users[1];
Reservations.RemoveAll(r => r.player1 == p1 && r.player2 == p2); Reservations.RemoveAll(r => r.player1 == p1 && r.player2 == p2);
OnReservationDeleteAck?.Invoke();
OnUpdatedReservations?.Invoke(new List<(string player1, string player2)>(Reservations)); OnUpdatedReservations?.Invoke(new List<(string player1, string player2)>(Reservations));
break; break;
} }