import { useState, useEffect } from "react"; import { useNakama } from "./providers/NakamaProvider"; import Board from "./Board"; import Leaderboard from "./Leaderboard"; // import { Match } from "@heroiclabs/nakama-js"; // import MatchList from "./MatchList"; export default function TicTacToe() { const [username, setUsername] = useState(""); const [selectedMode, setSelectedMode] = useState("classic"); const [board, setBoard] = useState([ ["", "", ""], ["", "", ""], ["", "", ""] ]); const [turn, setTurn] = useState(0); const [winner, setWinner] = useState(null); // const [openMatches, setOpenMatches] = useState([]); const [players, setPlayers] = useState([]); const { loginOrRegister, joinMatchmaker, onMatchData, sendMatchData, listOpenMatches, matchId, session, } = useNakama(); useEffect(() => { onMatchData((msg) => { console.log("[Match Data]", msg); if (msg.opCode === 2) { const state = msg.data; console.log("Match state:", state); setBoard(state.board); setTurn(state.turn); setWinner(state.winner || null); // new: setPlayers(state.players || []); } }); }, [onMatchData]); // useEffect(() => { // let active = true; // // async function refreshLoop() { // while (active) { // const matches = await listOpenMatches(); // setOpenMatches(matches); // // await new Promise(res => setTimeout(res, 500)); // 0.5s refresh // } // } // // refreshLoop(); // // return () => { // active = false; // }; // }, [listOpenMatches]); // ------------------------------------------ // CONNECT // ------------------------------------------ async function connect() { await loginOrRegister(username); // Match data listener onMatchData((msg) => { console.log("[Match Data]", msg); if (msg.opCode === 2) { const state = msg.data; console.log("Match state:", state); setBoard(state.board); setTurn(state.turn); setWinner(state.winner || null); // new: setPlayers(state.players || []); } }); } // ------------------------------------------ // SEND A MOVE // ------------------------------------------ function handleCellClick(row: number, col: number) { if (!matchId) return; sendMatchData(matchId, 1, { row, col }); // OpMove=1 } // ------------------------------------------ // MATCHMAKING // ------------------------------------------ async function startQueue(selectedMode: string) { const ticket = await joinMatchmaker(selectedMode); console.log("Queued:", ticket); } return (

Tic Tac Toe Multiplayer

{!session && ( <> setUsername(e.target.value)} /> )} {session && !matchId && ( <>

Hello, {session.username}

{/* Game mode selection */} {/* Join matchmaking */} {/*/!* List open matches *!/*/} {/**/} )} {matchId && ( )}
); }