From: Benjamin Auder Date: Wed, 30 Jan 2019 20:10:14 +0000 (+0100) Subject: Prepare new home X-Git-Url: https://git.auder.net/doc/html/pieces/current/R.css?a=commitdiff_plain;h=5b020e732156ee77d3b15b127aef2df57c2562ad;p=vchess.git Prepare new home --- diff --git a/client/next_src/views/Hall.vue b/client/next_src/views/Hall.vue deleted file mode 100644 index c1ef7eb0..00000000 --- a/client/next_src/views/Hall.vue +++ /dev/null @@ -1,176 +0,0 @@ - - - - -// main playing hall: chat + online players + current challenges + button "new game" -// 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 -/* -TODO: surligner si nouveau défi perso et pas affichage courant -(cadences base + incrément, corr == incr >= 1jour ou base >= 7j) ---> correspondance: stocker sur serveur lastMove + uid + color + movesCount + gameId + variant + timeleft -fin de partie corr: supprimer partie du serveur au bout de 7 jours (arbitraire) -main time should be positive (no 0+2 & cie...) -*/ -// TODO: au moins l'échange des coups en P2P ? -// TODO: objet game, objet challenge ? et player ? -Vue.component('my-room', { - props: ["conn","settings"], - data: function () { - return { - gdisplay: "live", - user: user, - liveGames: [], - corrGames: [], - players: [], //online players - challenges: [], //live challenges - people: [], //people who connect to this room (or disconnect) - }; - }, - // Modal new game, and then sub-components - template: ` -
- -
-
- -

- {{ translate("Game state (FEN):") }} -

- -

TODO: cadence, adversaire (pre-filled if click on name)

-

cadence 2m+12s ou 7d+1d (m,s ou d,d) --> main, increment

-

Note: leave FEN blank for random; FEN only for targeted challenge

- -
-
-
- - - -
- -
-
-

Online players

-
- {{ p.name }} -
-
-
- - -
- - - - -
-
- `, - created: function() { - // TODO: ask server for current corr games (all but mines: names, ID, time control) - const socketMessageListener = msg => { - const data = JSON.parse(msg.data); - switch (data.code) - { - case "newgame": - // TODO: new game just started: data contain all informations - // (id, players, time control, fenStart ...) - break; - // TODO: also receive live games summaries (update) - // (just players names, time control, and ID + player ID) - case "acceptchallenge": - // oppid: opponent socket ID (or DB id if registered) - if (true) //TODO: if challenge is full - this.newGame(data.challenge, data.user); //user.id et user.name - break; - case "withdrawchallenge": - // TODO - break; - case "cancelchallenge": - // TODO - break; - // TODO: distinguish these (dis)connect events from their analogs in game.js - case "connect": - this.players.push({name:data.name, id:data.uid}); - break; - case "disconnect": - const pIdx = this.players.findIndex(p => p.id == data.uid); - this.players.splice(pIdx); - break; - } - }; - const socketCloseListener = () => { - this.conn.addEventListener('message', socketMessageListener); - this.conn.addEventListener('close', socketCloseListener); - }; - this.conn.onmessage = socketMessageListener; - this.conn.onclose = socketCloseListener; - }, - methods: { - translate: translate, - showGame: function(game) { - let hash = "#game?id=" + game.id; - if (!!game.uid) - hash += "&uid=" + game.uid; - location.hash = hash; - }, - challenge: function(player) { - this.conn.send(JSON.stringify({code:"sendchallenge", oppid:p.id, - user:{name:user.name,id:user.id}})); - }, - clickChallenge: function(challenge) { - const index = this.challenges.findIndex(c => c.id == challenge.id); - const toIdx = challenge.to.findIndex(p => p.id == user.id); - const me = {name:user.name,id:user.id}; - if (toIdx >= 0) - { - // It's a multiplayer challenge I accepted: withdraw - this.conn.send(JSON.stringify({code:"withdrawchallenge", - cid:challenge.id, user:me})); - this.challenges.to.splice(toIdx, 1); - } - else if (challenge.from.id == user.id) //it's my challenge: cancel it - { - this.conn.send(JSON.stringify({code:"cancelchallenge", cid:challenge.id})); - this.challenges.splice(index, 1); - } - else //accept a challenge - { - this.conn.send(JSON.stringify({code:"acceptchallenge", - cid:challenge.id, user:me})); - this.challenges[index].to.push(me); - } - }, - // user: last person to accept the challenge - newGame: function(chall, user) { - const fen = chall.fen || V.GenRandInitFen(); - const game = {}; //TODO: fen, players, time ... - //setStorage(game); //TODO - game.players.forEach(p => { - this.conn.send( - JSON.stringify({code:"newgame", oppid:p.id, game:game})); - }); - if (this.settings.sound >= 1) - new Audio("/sounds/newgame.mp3").play().catch(err => {}); - }, - }, -}); diff --git a/client/next_src/views/correspondance_merge_hall.js b/client/next_src/views/correspondance_merge_hall.js deleted file mode 100644 index 7dbde157..00000000 --- a/client/next_src/views/correspondance_merge_hall.js +++ /dev/null @@ -1,161 +0,0 @@ -Vue.component("my-correspondance", { - data: function() { - return { - userId: user.id, - games: [], - challenges: [], - willPlay: [], //IDs of challenges in which I decide to play (>= 3 players) - newgameInfo: { - fen: "", - vid: 0, - nbPlayers: 0, - players: [{id:0,name:""},{id:0,name:""},{id:0,name:""}], - mainTime: 0, - increment: 0, - }, - }; - }, - template: ` -
- -
-
- -
- - -
-
- - -
-
- -
- - -
-
-
- -
- - - -
-
-
- - -
- -
-
-

- Correspondance play is reserved to registered users -

-
- - - - - -
-
- `, - computed: { - // TODO: this is very artificial... - variants: function() { - return variantArray; - }, - }, - created: function() { - // use user.id to load challenges + games from server - }, - methods: { - translate: translate, - clickChallenge: function() { - // TODO: accepter un challenge peut lancer une partie, il - // faut alors supprimer challenge + creer partie + la retourner et l'ajouter ici - // autres actions: - // supprime mon défi - // accepte un défi - // annule l'acceptation d'un défi (si >= 3 joueurs) - // - // si pas le mien et FEN speciale :: (charger code variante et) - // montrer diagramme + couleur (orienté) - }, - showGame: function(g) { - // Redirect to /variant#game?id=... - location.href="/variant#game?id=" + g.id; - }, - newGame: function() { - const afterRulesAreLoaded = () => { - // NOTE: side-effect = set FEN - // TODO: (to avoid any cheating option) separate the GenRandInitFen() functions - // in separate files, load on server and generate FEN on server. - const error = checkChallenge(this.newgameInfo, vname); - if (!!error) - return alert(error); - // Possible (server) error if filled player does not exist - ajax( - "/challenges/" + this.newgameInfo.vid, - "POST", - this.newgameInfo, - response => { - const chall = Object.assign({}, - this.newgameInfo, - { - id: response.cid, - uid: user.id, - added: Date.now(), - vname: vname, - }, - this.challenges.push(response.challengei); - } - ); - }; - const idxInVariants = - variantArray.findIndex(v => v.id == this.newgameInfo.vid); - const vname = variantArray[idxInVariants].name; - const scriptId = vname + "RulesScript"; - if (!document.getElementById(scriptId)) - { - // Load variant rules (only once) - var script = document.createElement("script"); - script.id = scriptId; - script.onload = afterRulesAreLoaded; - //script.addEventListener ("load", afterRulesAreLoaded, false); - script.src = "/javascripts/variants/" + vname + ".js"; - document.body.appendChild(script); - } - else - afterRulesAreLoaded(); - }, - possibleNbplayers: function(nbp) { - if (this.newgameInfo.vid == 0) - return false; - const idxInVariants = - variantArray.findIndex(v => v.id == this.newgameInfo.vid); - return NbPlayers[variantArray[idxInVariants].name].includes(nbp); - }, - }, -}); diff --git a/client/src/main.js b/client/src/main.js index 46d99abe..97bad754 100644 --- a/client/src/main.js +++ b/client/src/main.js @@ -20,6 +20,11 @@ new Vue({ // }, created: function() { window.doClick = (elemId) => { document.getElementById(elemId).click() }; + + // TODO: AJAX call get corr games (all variants) + // si dernier lastMove sur serveur n'est pas le mien et nextColor == moi, alors background orange + // ==> background orange si à moi de jouer par corr (sur main index) + // (helper: static fonction "GetNextCol()" dans base_rules.js) //TODO: si une partie en cours dans storage, rediriger vers cette partie //(à condition que l'URL n'y corresponde pas déjà !) diff --git a/client/src/playCompMove.js b/client/src/playCompMove.js index 45da5113..d6b0cea9 100644 --- a/client/src/playCompMove.js +++ b/client/src/playCompMove.js @@ -5,7 +5,6 @@ onmessage = function(e) { case "scripts": self.importScripts( - '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js', '/javascripts/base_rules.js', '/javascripts/utils/array.js', '/javascripts/variants/' + e.data[1] + '.js'); diff --git a/client/src/router.js b/client/src/router.js index 7c2e2a68..b373cdc2 100644 --- a/client/src/router.js +++ b/client/src/router.js @@ -15,6 +15,16 @@ export default new Router({ name: "home", component: Home, }, + { + path: "/variants", + name: "variants", + component: loadView("Variants"), + }, +// { +// path: "/variants/:vname([a-zA-Z0-9]+)", +// name: "rules", +// component: Rules, +// }, // { // path: "/about", // name: "about", @@ -26,11 +36,6 @@ export default new Router({ // // return import(/* webpackChunkName: "about" */ "./views/About.vue"); // //} // }, -// { -// path: "/test", -// name: "test", -// component: loadView("Test"), -// }, // TODO: gameRef, problemId: https://router.vuejs.org/guide/essentials/dynamic-matching.html ] }); diff --git a/client/src/views/Home.vue b/client/src/views/Home.vue index dfd39391..c2c5b442 100644 --- a/client/src/views/Home.vue +++ b/client/src/views/Home.vue @@ -1,87 +1,242 @@ - - - diff --git a/client/src/views/Variants.vue b/client/src/views/Variants.vue new file mode 100644 index 00000000..03903572 --- /dev/null +++ b/client/src/views/Variants.vue @@ -0,0 +1,68 @@ + + + + + +