From 83ae342499878fe60176c5c43acf02c150455426 Mon Sep 17 00:00:00 2001 From: Vishesh 'ironeagle' Bangotra Date: Mon, 1 Dec 2025 20:55:24 +0530 Subject: [PATCH] feat(matchmaking): add selectedGame support and implement exitMatchmaker to clear active tickets Added selectedGame state and UI dropdown Updated startQueue() to pass { game, mode } metadata Added exitMatchmaker() to remove existing ticket Stored active matchmaker ticket in context Prevents duplicate matchmaker ticket errors --- src/Player.tsx | 40 +++++++++++++++++++++++++++----- src/providers/NakamaProvider.tsx | 15 ++++++++++++ 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/src/Player.tsx b/src/Player.tsx index 4c60bc1..2c6dfaa 100644 --- a/src/Player.tsx +++ b/src/Player.tsx @@ -14,11 +14,13 @@ export default function Player({ logout, onMatchData, joinMatchmaker, + exitMatchmaker, } = useNakama(); const [username, setUsername] = useState( localStorage.getItem("username") ?? "" ); + const [selectedGame, setSelectedGame] = useState("tictactoe"); const [selectedMode, setSelectedMode] = useState("classic"); const [isQueueing, setIsQueueing] = useState(false); const isRegistered = localStorage.getItem("registered") === "yes"; @@ -36,14 +38,19 @@ export default function Player({ // ------------------------------------------ // MATCHMAKING // ------------------------------------------ - async function startQueue(selectedMode: string) { + async function startQueue( + selectedGame: string, + selectedMode: string + ) { setIsQueueing(true); + const gameMetadata = { + game: selectedGame, + mode: selectedMode, + } try { - const ticket = await joinMatchmaker({ - game: 'tictactoe', - mode: selectedMode, - }); + await exitMatchmaker(gameMetadata) + const ticket = await joinMatchmaker(gameMetadata); console.log("Queued:", ticket); } catch (err) { console.error("Matchmaking failed:", err); @@ -148,6 +155,24 @@ export default function Player({ Select Game Mode + +