X-Git-Url: https://git.auder.net/?a=blobdiff_plain;ds=sidebyside;f=client%2Fsrc%2Fviews%2FHall.vue;h=60f62917226af3c9b2fa3c528e774c1ff25ce1d0;hb=cd0d7743323309fcfd241ccba959df81a77970c7;hp=1ad88b4e16f5aef44eb277989b3882bc2a60542f;hpb=f41ce5806b989c06091a403d7e26ff3c457650c9;p=vchess.git
diff --git a/client/src/views/Hall.vue b/client/src/views/Hall.vue
index 1ad88b4e..60f62917 100644
--- a/client/src/views/Hall.vue
+++ b/client/src/views/Hall.vue
@@ -117,17 +117,21 @@ export default {
computed: {
uniquePlayers: function() {
// Show e.g. "@nonymous (5)", and do nothing on click on anonymous
- let anonymous = {id:0, name:"@nonymous", count:0};
- let playerList = [];
+ let anonymous = {name:"@nonymous", count:0};
+ let playerList = {};
this.people.forEach(p => {
if (p.id > 0)
- playerList.push(p);
+ {
+ // We don't count registered users connections: either they are here or not.
+ if (!playerList[p.id])
+ playerList[p.id] = {name: p.name, count: 0};
+ }
else
anonymous.count++;
});
if (anonymous.count > 0)
- playerList.push(anonymous);
- return playerList;
+ playerList[0] = anonymous;
+ return Object.values(playerList);
},
},
created: function() {
@@ -280,8 +284,9 @@ export default {
// Ask identity, challenges and game(s)
this.st.conn.send(JSON.stringify({code:"askidentity", target:sid}));
this.st.conn.send(JSON.stringify({code:"askchallenge", target:sid}));
- this.st.conn.send(JSON.stringify({code:"askgame", target:sid}));
});
+ // Also ask current games to all playing peers (TODO: some design issue)
+ this.st.conn.send(JSON.stringify({code:"askgames"}));
break;
}
case "askidentity":
@@ -317,26 +322,6 @@ export default {
}
break;
}
- case "askgame":
- {
- // Send my current live game (if any)
- GameStorage.getCurrent((game) => {
- if (!!game)
- {
- const myGame =
- {
- // Minimal game informations:
- id: game.id,
- players: game.players.map(p => p.name),
- vid: game.vid,
- timeControl: game.timeControl,
- };
- this.st.conn.send(JSON.stringify({code:"game",
- game:myGame, target:data.from}));
- }
- });
- break;
- }
case "identity":
{
const pIdx = this.people.findIndex(p => p.sid == data.user.sid);
@@ -381,8 +366,8 @@ export default {
else
{
this.infoMessage = "New game started: " +
- "" +
- "#/game/" + data.gameInfo.gameId + "";
+ "" +
+ "#/game/" + data.gameInfo.id + "";
let modalBox = document.getElementById("modalInfo");
modalBox.checked = true;
setTimeout(() => { modalBox.checked = false; }, 3000);
@@ -404,20 +389,20 @@ export default {
}
case "connect":
{
- this.people.push({name:"", id:0, sid:data.sid});
- this.st.conn.send(JSON.stringify({code:"askidentity", target:data.sid}));
- this.st.conn.send(JSON.stringify({code:"askchallenge", target:data.sid}));
- this.st.conn.send(JSON.stringify({code:"askgame", target:data.sid}));
+ this.people.push({name:"", id:0, sid:data.from});
+ this.st.conn.send(JSON.stringify({code:"askidentity", target:data.from}));
+ this.st.conn.send(JSON.stringify({code:"askchallenge", target:data.from}));
+ this.st.conn.send(JSON.stringify({code:"askgame", target:data.from}));
break;
}
case "disconnect":
{
- ArrayFun.remove(this.people, p => p.sid == data.sid);
+ ArrayFun.remove(this.people, p => p.sid == data.from);
// Also remove all challenges sent by this player:
- ArrayFun.remove(this.challenges, c => c.from.sid == data.sid);
+ ArrayFun.remove(this.challenges, c => c.from.sid == data.from);
// And all live games where he plays and no other opponent is online
ArrayFun.remove(this.games, g =>
- g.type == "live" && (g.players.every(p => p.sid == data.sid
+ g.type == "live" && (g.players.every(p => p.sid == data.from
|| !this.people.some(pl => pl.sid == p.sid))), "all");
break;
}
@@ -539,7 +524,7 @@ export default {
// These game informations will be sent to other players
const gameInfo =
{
- gameId: getRandString(),
+ id: getRandString(),
fen: c.fen || V.GenRandInitFen(),
players: shuffle([c.from, c.seat]), //white then black
vid: c.vid,
@@ -572,12 +557,21 @@ export default {
"POST",
{gameInfo: gameInfo, cid: c.id}, //cid useful to delete challenge
response => {
- gameInfo.gameId = response.gameId;
+ gameInfo.id = response.gameId;
tryNotifyOpponent();
this.$router.push("/game/" + response.gameId);
}
);
}
+ // Send game info to everyone except opponent (and me)
+ this.st.conn.send(JSON.stringify({code:"game",
+ game: { //minimal game info:
+ id: gameInfo.id,
+ players: gameInfo.players.map(p => p.name),
+ vid: gameInfo.vid,
+ timeControl: gameInfo.timeControl,
+ },
+ oppsid: target}));
},
// NOTE: for live games only (corr games start on the server)
startNewGame: function(gameInfo) {
@@ -594,7 +588,7 @@ export default {
GameStorage.add(game);
if (this.st.settings.sound >= 1)
new Audio("/sounds/newgame.mp3").play().catch(err => {});
- this.$router.push("/game/" + gameInfo.gameId);
+ this.$router.push("/game/" + gameInfo.id);
},
},
};