]> git.cworth.org Git - lmno.games/blobdiff - tictactoe/tictactoe.jsx
Expect defailed error message from the server when rejecting a move
[lmno.games] / tictactoe / tictactoe.jsx
index 849a6f2a113f6141ceaf1e33927bb10d2bbadd23..61a828eb751d6662e63681aa6e313cb6ed95dd20 100644 (file)
@@ -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`);
     }