X-Git-Url: https://git.cworth.org/git?p=lmno.games;a=blobdiff_plain;f=tictactoe%2Ftictactoe.jsx;h=61a828eb751d6662e63681aa6e313cb6ed95dd20;hp=654d55ee17c45da10c83ab4ecf1b4ed276b719e7;hb=9c92603bbe96c1bb54db5247ba73e7ea447845c1;hpb=9d201384db591cc94d872c4046a2bc67d1c57133 diff --git a/tictactoe/tictactoe.jsx b/tictactoe/tictactoe.jsx index 654d55e..61a828e 100644 --- a/tictactoe/tictactoe.jsx +++ b/tictactoe/tictactoe.jsx @@ -20,9 +20,19 @@ events.onerror = function(event) { }; events.addEventListener("move", event => { - const square = JSON.parse(event.data); + const move = JSON.parse(event.data); - window.game.receiveMove(square); + window.game.receiveMove(move); +}); + +events.addEventListener("game-state", event => { + const state = JSON.parse(event.data); + + window.game.resetState(); + + for (let square of state.moves) { + window.game.receiveMove(square); + } }); function Square(props) { @@ -92,7 +102,19 @@ class Game extends React.Component { } sendMove(i) { - return fetch_post_json("move", { square: i }); + return fetch_post_json("move", { move: i }); + } + + resetState() { + this.setState({ + history: [ + { + squares: Array(9).fill(null) + } + ], + stepNumber: 0, + xIsNext: true + }); } receiveMove(i) { @@ -117,9 +139,9 @@ class Game extends React.Component { async handleClick(i) { const response = await this.sendMove(i); if (response.status == 200) { - const legal = await response.json(); - if (! legal) - add_message("danger", `Illegal move.`); + const result = await response.json(); + if (! result.legal) + add_message("danger", result.message); } else { add_message("danger", `Error occurred sending move`); } @@ -137,17 +159,6 @@ class Game extends React.Component { const current = history[this.state.stepNumber]; const winner = calculateWinner(current.squares); - const moves = history.map((step, move) => { - const desc = move ? - 'Go to move #' + move : - 'Go to game start'; - return ( -
  • - -
  • - ); - }); - let status; if (winner) { status = "Winner: " + winner; @@ -157,16 +168,15 @@ class Game extends React.Component { return (
    +
    +
    {status}
    +
    this.handleClick(i)} />
    -
    -
    {status}
    -
      {moves}
    -
    ); }