X-Git-Url: https://git.cworth.org/git?p=lmno.games;a=blobdiff_plain;f=tictactoe%2Ftictactoe.jsx;h=25c8a9f887742312c4537fca678823628be1190d;hp=eff7eff32f6df572437130d0ec2c0e8ecf8c2a7b;hb=4e9bfe84b21940998e45ad8dd79769df5dfed3ee;hpb=f0c30f7cd59ecfca24e6a7332910f87a6b2045e6 diff --git a/tictactoe/tictactoe.jsx b/tictactoe/tictactoe.jsx index eff7eff..25c8a9f 100644 --- a/tictactoe/tictactoe.jsx +++ b/tictactoe/tictactoe.jsx @@ -1,3 +1,40 @@ +function undisplay(element) { + element.style.display="none"; +} + +function add_message(severity, message) { + message = `
+× +${message} +
`; + const message_area = document.getElementById('message-area'); + message_area.insertAdjacentHTML('beforeend', message); +} + +const events = new EventSource("events"); + +events.onerror = function(event) { + if (event.target.readyState === EventSource.CLOSED) { + add_message("danger", "Connection to server lost."); + } +}; + +events.addEventListener("move", event => { + const square = JSON.parse(event.data); + + window.game.receiveMove(square); +}); + +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) { return ( - - ); - }); - let status; if (winner) { status = "Winner: " + winner; @@ -104,16 +168,15 @@ class Game extends React.Component { return (
+
+
{status}
+
this.handleClick(i)} />
-
-
{status}
-
    {moves}
-
); } @@ -121,7 +184,9 @@ class Game extends React.Component { // ======================================== -ReactDOM.render(, document.getElementById("tictactoe")); +ReactDOM.render( window.game = me} + />, document.getElementById("tictactoe")); function calculateWinner(squares) { const lines = [