Save state: draft of askgame logic but some bugs for now
[vchess.git] / client / src / views / Game.vue
index e417e5e..5939c90 100644 (file)
         button(@click="abortGame") {{ st.tr["Game is too boring"] }}
     BaseGame(:game="game" :vr="vr" ref="basegame"
       @newmove="processMove" @gameover="gameOver")
-    textarea#mvMessage(v-if="game.type=='corr'" v-model="corrMsg")
     div Names: {{ game.players[0].name }} - {{ game.players[1].name }}
-    div Time: {{ virtualClocks[0] }} - {{ virtualClocks[1] }}
+    div(v-if="game.score=='*'") Time: {{ virtualClocks[0] }} - {{ virtualClocks[1] }}
     .button-group(v-if="game.mode!='analyze' && game.score=='*'")
       button(@click="offerDraw") Draw
       button(@click="() => abortGame()") Abort
       button(@click="resign") Resign
-    div(v-if="game.type=='corr'")
-      textarea(v-show="score=='*' && vr.turn==game.mycolor" v-model="corrMsg")
-      div(v-show="cursor>=0") {{ moves[cursor].message }}
+    textarea(v-if="game.score=='*'" v-model="corrMsg")
+    Chat(:players="game.players")
 </template>
 
 <!--
-// TODO: movelist dans basegame et chat ici
 // ==> après, implémenter/vérifier les passages de challenges + parties en cours
 // observer,
-// + problèmes, habiller et publier. (+ corr...)
-// when send to chat (or a move), reach only this group (send gid along)
 -->
 
 <script>
 import BaseGame from "@/components/BaseGame.vue";
-//import Chat from "@/components/Chat.vue";
-//import MoveList from "@/components/MoveList.vue";
+import Chat from "@/components/Chat.vue";
 import { store } from "@/store";
 import { GameStorage } from "@/utils/gameStorage";
 import { ppt } from "@/utils/datetime";
@@ -45,6 +39,7 @@ export default {
   name: 'my-game',
   components: {
     BaseGame,
+    Chat,
   },
   // gameRef: to find the game in (potentially remote) storage
   data: function() {
@@ -114,6 +109,8 @@ export default {
       this.gameRef.rid = this.$route.query["rid"];
       this.loadGame();
     }
+    // TODO: mode analyse (/analyze/Atomic/rn
+    // ... fen = query[], vname=params[] ...
     // 0.1] Ask server for room composition:
     const funcPollClients = () => {
       this.st.conn.send(JSON.stringify({code:"pollclients"}));
@@ -187,6 +184,19 @@ export default {
           }
           break;
         }
+        case "askgame":
+          // Send current (live) game
+          const myGame =
+          {
+            // Minimal game informations:
+            id: this.game.id,
+            players: this.game.players.map(p => p.name),
+            vid: this.game.vid,
+            timeControl: this.game.timeControl,
+          };
+          this.st.conn.send(JSON.stringify({code:"game",
+            game:myGame, target:data.from}));
+          break;
         case "newmove":
           // NOTE: this call to play() will trigger processMove()
           this.$refs["basegame"].play(data.move,
@@ -238,12 +248,12 @@ export default {
         // ==> on "newmove", check "drawOffer" field
         case "connect":
         {
-          this.people.push({name:"", id:0, sid:data.sid});
-          this.st.conn.send(JSON.stringify({code:"askidentity", target:data.sid}));
+          this.people.push({name:"", id:0, sid:data.from});
+          this.st.conn.send(JSON.stringify({code:"askidentity", target:data.from}));
           break;
         }
         case "disconnect":
-          ArrayFun.remove(this.people, p => p.sid == data.sid);
+          ArrayFun.remove(this.people, p => p.sid == data.from);
           break;
       }
     },