js-gamemanager
Version:
A set of methods to handle the creating and managing of players and lobbies for a Socket.IO project.
127 lines (100 loc) • 2.84 kB
JavaScript
class GameManager {
constructor() {
this.games = [];
this.players = [];
}
addGame(hostID, roomName) {
let game = {
host: hostID,
room: roomName,
}
this.games.push(game);
return game
};
addPlayer(room, name, socketID) {
var player = {
username: name,
id: socketID,
room,
score: 0
};
this.players.push(player);
return player;
};
removeGame(socketID) {
var game = this.getGameByHost(socketID);
if(game) {
this.games = this.games.filter((game) => {
return game.host != socketID;
});
};
return game;
};
removePlayer(socketID) {
var player = this.getPlayerBySocket(socketID);
if(player) {
this.players = this.players.filter((player) => {
return player.id != socketID;
});
};
return player;
};
removeFromRoom(room) {
var removedPlayers = [];
this.players = this.players.filter((player) => {
if(player.room === room) {
removedPlayers.push(player);
} else {
return player;
};
});
return removedPlayers;
};
getFromRoom(room) {
var players = this.players.filter((player) => {
return player.room === room;
});
return players;
};
isHostOrPlayer(socketID) {
if(this.getGameByHost(socketID) != undefined) {
return "HOST";
} else if(this.getPlayerBySocket(socketID) != undefined) {
return "PLAYER";
} else return "NOTFOUND";
};
getGameByHost(hostID) {
return this.games.filter((game) => {
return game.host === hostID;
})[0];
};
getGameByRoom(roomName) {
return this.games.filter((game) => {
return game.room === roomName;
})[0];
};
getPlayerBySocket(socketID) {
return this.players.filter((player) => {
return player.id === socketID;
})[0];
};
checkUsername(room, username) {
var players = this.getFromRoom(room);
var available = true;
players.filter((player) => {
if(player.username === username) {
available = false;
};
});
return available;
};
checkRoomName(room) {
var game = this.getGameByRoom(room);
if(game) {
return false;
} else {
return true;
};
};
}
module.exports = {GameManager}