added joining to room

This commit is contained in:
Wenszel
2023-11-28 18:51:50 +01:00
parent a1b39a3a45
commit f318afe071
16 changed files with 356 additions and 160 deletions
+3 -2
View File
@@ -17,8 +17,9 @@ const getJoinableRoom = async () => {
return await Room.findOne({ full: false, started: false }).exec();
};
const createNewRoom = () => {
const room = new Room();
const createNewRoom = data => {
const room = new Room(data);
room.save();
return room;
};
+6 -15
View File
@@ -1,17 +1,15 @@
const { getRoom, updateRoom, getJoinableRoom, createNewRoom, findPlayer } = require('../controllers/roomController');
const { getRoom, updateRoom } = require('../controllers/roomController');
const { colors } = require('../utils/constants');
module.exports = socket => {
const req = socket.request;
const handleLogin = async data => {
if (await findPlayer(req.sessionID)) return;
const room = await getJoinableRoom();
if (room) {
addPlayerToExistingRoom(room, data);
} else {
addNewRoom(data);
}
const room = await getRoom(data.roomId);
if (room.isFull()) return socket.emit('error:changeRoom');
if (room.started) return socket.emit('error:changeRoom');
if (room.private && room.password !== data.password) return socket.emit('error:wrongPassword');
addPlayerToExistingRoom(room, data);
};
const handleReady = async () => {
@@ -23,13 +21,6 @@ module.exports = socket => {
await updateRoom(room);
};
const addNewRoom = async data => {
const room = createNewRoom();
room.addPlayer(data.name, req.sessionID);
await room.save();
reloadSession(room);
};
const addPlayerToExistingRoom = async (room, data) => {
room.addPlayer(data.name);
if (room.isFull()) {
+12 -18
View File
@@ -1,10 +1,10 @@
const { getRooms, getRoom, updateRoom } = require('../controllers/roomController');
const { getRooms, getRoom, updateRoom, createNewRoom } = require('../controllers/roomController');
const { sendToOnePlayerRooms, sendToOnePlayerData, sendToPlayersData } = require('../socket/emits');
module.exports = socket => {
const req = socket.request;
const getData = async () => {
const handleGetData = async () => {
const room = await getRoom(req.session.roomId);
// Handle the situation when the server crashes and any player reconnects after the time has expired
// Typically, the responsibility for changing players is managed by gameHandler.js.
@@ -15,23 +15,17 @@ module.exports = socket => {
sendToOnePlayerData(socket.id, room);
};
const getAllRooms = async () => {
const handleGetAllRooms = async () => {
let rooms = await getRooms();
const response = [];
rooms.forEach(room => {
if (!room.isStarted && !room.isFull()) {
response.push({
_id: room._id,
private: room.private,
name: room.name,
players: room.players,
isStarted: room.isStarted,
});
}
});
sendToOnePlayerRooms(socket.id, response);
sendToOnePlayerRooms(socket.id, rooms);
};
socket.on('room:data', getData);
socket.on('room:rooms', getAllRooms);
const handleCreateRoom = async data => {
createNewRoom(data);
socket.to(socket.id).emit('room:created');
};
socket.on('room:data', handleGetData);
socket.on('room:rooms', handleGetAllRooms);
socket.on('room:create', handleCreateRoom);
};
+1 -1
View File
@@ -7,7 +7,7 @@ const PlayerSchema = require('./player');
const RoomSchema = new mongoose.Schema({
name: String,
private: { type: Boolean, default: true },
private: { type: Boolean, default: false },
password: String,
createDate: { type: Date, default: Date.now },
started: { type: Boolean, default: false },