Implement the JoinGame event
This commit is contained in:
parent
e45a1a4b89
commit
bdc7bccfcc
1 changed files with 51 additions and 2 deletions
|
|
@ -9,7 +9,56 @@ Emissions:
|
|||
players and that they were added to the game either successfully or not
|
||||
*/
|
||||
import { Socket } from 'socket.io';
|
||||
import { active_games, log } from '../main';
|
||||
export const JoinGame = (socket: Socket, data: JoinGame) => {
|
||||
console.log(`User: ${data.username} (${data.game_code})`);
|
||||
console.log(`Joining a game`);
|
||||
try {
|
||||
// Check if it's an active game
|
||||
if (!Object.keys(active_games).includes(data.game_code)) {
|
||||
log.debug(`Can't find an active game with code: ${data.game_code}`);
|
||||
socket.emit(`GameJoined`, {
|
||||
success: false,
|
||||
message: `Could not find an active game with that game code.`
|
||||
});
|
||||
return;
|
||||
};
|
||||
|
||||
let game = active_games[data.game_code];
|
||||
|
||||
if (game.status !== `lobby`) {
|
||||
log.debug(`Cannot join the game ${game.code}. (state=${game.status})`)
|
||||
socket.emit(`GameJoined`, {
|
||||
success: false,
|
||||
message: `That game cannot be joined because it is not in the lobby.`,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// Ensure username is not already taken
|
||||
if (Object.keys(game.players).includes(data.username)) {
|
||||
socket.emit(`GameJoined`, {
|
||||
success: false,
|
||||
message: `That username is already taken, please try another.`,
|
||||
});
|
||||
return;
|
||||
};
|
||||
|
||||
game.add_player(data.username);
|
||||
|
||||
// Alert player who joined
|
||||
socket.emit(`GameJoined`, {
|
||||
success: true,
|
||||
players: game.players,
|
||||
})
|
||||
|
||||
// Alert existing players about new player
|
||||
socket.broadcast.emit(`NewPlayer`, {
|
||||
game_code: data.game_code,
|
||||
player: data.username,
|
||||
});
|
||||
} catch (err) {
|
||||
socket.emit(`GameJoined`, {
|
||||
success: false,
|
||||
message: `${err.name}: ${err.message}`,
|
||||
})
|
||||
}
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue