added joining to room
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
@@ -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 },
|
||||
|
||||
Reference in New Issue
Block a user