Fixed DB and session management
Signed-off-by: James Ketrenos <james_eikona@ketrenos.com>
This commit is contained in:
parent
fd2795892f
commit
51a60d0837
@ -147,16 +147,23 @@ const getSession = (game, session) => {
|
|||||||
game.sessions = {};
|
game.sessions = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!session.player_id) {
|
||||||
|
session.player_id = crypto.randomBytes(32).toString('hex');
|
||||||
|
}
|
||||||
|
|
||||||
|
const id = session.player_id;
|
||||||
|
|
||||||
/* If this session is not yet in the game,
|
/* If this session is not yet in the game,
|
||||||
* add it and set the player's name */
|
* add it and set the player's name */
|
||||||
if (!(session in game.sessions)) {
|
if (!(id in game.sessions)) {
|
||||||
game.sessions[session] = {
|
game.sessions[id] = {
|
||||||
name: undefined,
|
name: undefined,
|
||||||
|
color: undefined,
|
||||||
player: undefined
|
player: undefined
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return game.sessions[session];
|
return game.sessions[id];
|
||||||
};
|
};
|
||||||
|
|
||||||
const loadGame = async (id) => {
|
const loadGame = async (id) => {
|
||||||
@ -346,15 +353,15 @@ router.put("/:id/:action/:value?", async (req, res) => {
|
|||||||
return sendGame(req, res, game, error);
|
return sendGame(req, res, game, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
const session = getSession(game, req.session.id);
|
const session = getSession(game, req.session);
|
||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case 'player-name':
|
case 'player-name':
|
||||||
error = setPlayerName(game, session, value);
|
error = setPlayerName(game, session, value);
|
||||||
return sendGame(req, res, game, error);
|
return sendGame(req, res, game, error);
|
||||||
case 'player-selected':
|
case 'player-selected':
|
||||||
error = setPlayerColor(game, session, value);
|
error = setPlayerColor(game, session, value);
|
||||||
return sendGame(req, res, game, error);
|
return sendGame(req, res, game, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!session.player) {
|
if (!session.player) {
|
||||||
@ -456,23 +463,28 @@ const sendGame = async (req, res, game, error) => {
|
|||||||
|
|
||||||
let session;
|
let session;
|
||||||
if (req.session) {
|
if (req.session) {
|
||||||
session = getSession(game, req.session.id);
|
session = getSession(game, req.session);
|
||||||
session.lastActive = Date.now();
|
session.lastActive = Date.now();
|
||||||
} else {
|
} else {
|
||||||
session = {
|
session = {
|
||||||
name: "command line"
|
name: "command line"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Shallow copy game, filling its sessions with a shallow copy of sessions so we can then
|
/* Shallow copy game, filling its sessions with a shallow copy of sessions so we can then
|
||||||
* delete the player field from them */
|
* delete the player field from them */
|
||||||
const reducedGame = Object.assign({}, game, { sessions: {} });
|
const reducedGame = Object.assign({}, game, { sessions: {} }),
|
||||||
|
reducedSessions = [];
|
||||||
|
|
||||||
for (let id in game.sessions) {
|
for (let id in game.sessions) {
|
||||||
const reduced = Object.assign({}, game.sessions[id]);
|
const reduced = Object.assign({}, game.sessions[id]);
|
||||||
if (reduced.player) {
|
if (reduced.player) {
|
||||||
delete reduced.player;
|
delete reduced.player;
|
||||||
}
|
}
|
||||||
reducedGame.sessions[id] = reduced;
|
reducedGame.sessions[id] = reduced;
|
||||||
|
|
||||||
|
/* Do not send session-id as those are secrets */
|
||||||
|
reducedSessions.push(reduced);
|
||||||
}
|
}
|
||||||
|
|
||||||
await writeFile(`games/${game.id}`, JSON.stringify(reducedGame, null, 2))
|
await writeFile(`games/${game.id}`, JSON.stringify(reducedGame, null, 2))
|
||||||
@ -481,19 +493,12 @@ const sendGame = async (req, res, game, error) => {
|
|||||||
console.error(error);
|
console.error(error);
|
||||||
});
|
});
|
||||||
|
|
||||||
/* Do not send session-id as those are secrets */
|
|
||||||
const sessions = [];
|
|
||||||
for (let id in reducedGame.sessions) {
|
|
||||||
const reduced = reducedGame.sessions[id];
|
|
||||||
sessions.push(reduced);
|
|
||||||
}
|
|
||||||
|
|
||||||
const playerGame = Object.assign({}, reducedGame, {
|
const playerGame = Object.assign({}, reducedGame, {
|
||||||
timestamp: Date.now(),
|
timestamp: Date.now(),
|
||||||
status: error ? error : "success",
|
status: error ? error : "success",
|
||||||
name: session.name,
|
name: session.name,
|
||||||
color: session.color,
|
color: session.color,
|
||||||
sessions: sessions
|
sessions: reducedSessions
|
||||||
});
|
});
|
||||||
|
|
||||||
return res.status(200).send(playerGame);
|
return res.status(200).send(playerGame);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user