X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=public%2Fjavascripts%2Fcomponents%2Froom.js;h=d3dda053f0cbe1c8de3f790c4c20b80c8643fb66;hb=3ca7a846ae7bc5d8f7c628417418534f3c92593a;hp=941434b4f56aa784ccee64e8ad13cdee1bab87d7;hpb=b6487fb9c41705187cf97215fc9e8f86a59057c7;p=vchess.git
diff --git a/public/javascripts/components/room.js b/public/javascripts/components/room.js
index 941434b4..d3dda053 100644
--- a/public/javascripts/components/room.js
+++ b/public/javascripts/components/room.js
@@ -7,7 +7,8 @@ div(role="dialog" aria-labelledby="newGameTxt")
h3#newGameTxt= translations["New game"]
p= translations["Waiting for opponent..."]
*/
-
+// TODO: my-challenge-list, gérant clicks sur challenges, affichage, réception/émission des infos sur challenges ; de même, my-player-list
+// TODO: si on est en train de jouer une partie, le notifier aux nouveaux connectés
/*
Players + challenges : == "room" home of variant (surligner si nouveau défi perso et pas affichage courant)
joueurs en ligne (dte),
@@ -18,3 +19,135 @@ chat général (gauche, activé ou non (bool global storage)).
quand je poste un lastMove corr, supprimer mon ancien lastMove le cas échéant (tlm l'a eu)
fin de partie corr: garder maxi nbPlayers lastMove sur serveur, pendant 7 jours (arbitraire)
*/
+// TODO: au moins l'échange des coups en P2P ?
+Vue.component('my-room', {
+ props: ["conn","settings"],
+ data: {
+ remoteGames: [],
+ corrGames: [],
+ },
+ // Modal new game, and then sub-components
+ template: `
+
+
+
+
+
+
+ {{ translate("Game state (FEN):") }}
+
+
+
TODO: cadence, adversaire (pre-filled if click on name)
+
Note: leave FEN blank for random
+
+
+
+
+
+
+
+
+
+ // TODO: also corr games (of pther players)
+ // presentation ? table ?!
+ showGame(g.id,g.uid)">
+
+
+
+ `,
+ created: function() {
+ // TODO: ask server for current corr games (all but mines)
+ const socketMessageListener = msg => {
+ const data = JSON.parse(msg.data);
+ switch (data.code)
+ {
+ // TODO: also receive remote games summaries (update)
+ // (just players names, time control, and ID + player ID)
+ case "newgame": //challenge accepted
+ // oppid: opponent socket ID (or DB id if registered)
+ this.newGame("human", data.fen, data.color, data.oppid, data.gameid);
+ break;
+ }
+ };
+ const socketCloseListener = () => {
+ this.conn.addEventListener('message', socketMessageListener);
+ this.conn.addEventListener('close', socketCloseListener);
+ };
+ this.conn.onmessage = socketMessageListener;
+ this.conn.onclose = socketCloseListener;
+ },
+ methods: {
+ clickGameSeek: function(e) {
+ if (this.mode == "human" && this.score == "*")
+ return; //no newgame while playing
+ if (this.seek)
+ {
+ this.conn.send(JSON.stringify({code:"cancelnewgame"}));
+ this.seek = false;
+ }
+ else
+ this.newGame("human");
+ },
+ newGame: function(mode, fenInit, color, oppId, gameId) {
+ const fen = fenInit || VariantRules.GenRandInitFen();
+ console.log(fen); //DEBUG
+ if (mode=="human" && !oppId)
+ {
+ const storageVariant = localStorage.getItem("variant");
+ if (!!storageVariant && storageVariant !== variant.name
+ && localStorage["score"] == "*")
+ {
+ return alert(translations["Finish your "] +
+ storageVariant + translations[" game first!"]);
+ }
+ // Send game request and wait..
+ try {
+ this.conn.send(JSON.stringify({code:"newgame", fen:fen, gameid: getRandString() }));
+ } catch (INVALID_STATE_ERR) {
+ return; //nothing achieved
+ }
+ this.seek = true;
+ let modalBox = document.getElementById("modal-newgame");
+ modalBox.checked = true;
+ setTimeout(() => { modalBox.checked = false; }, 2000);
+ return;
+ }
+ this.vr = new VariantRules(fen, []);
+ this.score = "*";
+ this.pgnTxt = ""; //redundant with this.score = "*", but cleaner
+ this.mode = mode;
+ this.incheck = [];
+ this.fenStart = V.ParseFen(fen).position; //this is enough
+ if (mode=="human")
+ {
+ // Opponent found!
+ this.gameId = gameId;
+ this.oppid = oppId;
+ this.oppConnected = true;
+ this.mycolor = color;
+ this.seek = false;
+ if (this.sound >= 1)
+ new Audio("/sounds/newgame.mp3").play().catch(err => {});
+ document.getElementById("modal-newgame").checked = false;
+ }
+ this.setStorage(); //store game state in case of interruptions
+ },
+ continueGame: function() {
+ this.oppid = localStorage.getItem("oppid");
+ this.mycolor = localStorage.getItem("mycolor");
+ const moves = JSON.parse(localStorage.getItem("moves"));
+ const fen = localStorage.getItem("fen");
+ const score = localStorage.getItem("score"); //always "*" ?!
+ this.fenStart = localStorage.getItem("fenStart");
+ this.vr = new VariantRules(fen);
+ this.incheck = this.vr.getCheckSquares(this.vr.turn);
+ this.gameId = localStorage.getItem("gameId");
+ // Send ping to server (answer pong if opponent is connected)
+ this.conn.send(JSON.stringify({
+ code:"ping",oppid:this.oppid,gameId:this.gameId}));
+ },
+ },
+});