Implement waiting room

This commit is contained in:
2025-02-28 22:50:00 +01:00
parent 11b3b48caa
commit 76580841af
9 changed files with 705 additions and 11 deletions

View File

@ -1,6 +1,15 @@
const {connectUserToRoom, roomExists, disconnectUser, getUserRoom, getRoomUsers} = require("../controller/room");
const {
connectUserToRoom,
roomExists,
disconnectUser,
getUserRoom,
getRoomUsers,
isRoomOpen,
startGame,
isUserHost
} = require("../controller/room");
module.exports = (socket) => {
module.exports = (io) => (socket) => {
let currentRoomId = null;
let currentUser = null;
@ -13,22 +22,33 @@ module.exports = (socket) => {
socket.on("join-room", ({roomId, name}) => {
if (currentRoomId) return socket.emit("already-in-room", currentRoomId);
roomId = roomId.toString().toUpperCase();
if (roomExists(roomId.toString())) {
if (roomExists(roomId)) {
if (!isRoomOpen(roomId)) {
return socket.emit("room-closed", roomId);
}
currentUser = {id: socket.id, name: name.toString()};
connectUserToRoom(roomId, currentUser);
socket.join(roomId);
const users = getRoomUsers(roomId);
io.to(roomId).emit("room-users-update", users);
socket.to(roomId).emit("user-connected", currentUser);
socket.emit("room-joined", roomId);
currentRoomId = roomId;
} else {
socket.emit("room-not-found", roomId.toString());
socket.emit("room-not-found", roomId);
}
});
socket.on("create-room", ({name}) => {
if (!name) return socket.emit("room-name-required");
const roomId = Math.random().toString(36).substring(7);
const roomId = Math.random().toString(36).substring(7).toUpperCase();
currentUser = {id: socket.id, name: name?.toString()};
connectUserToRoom(roomId, currentUser);
socket.join(roomId);
@ -36,6 +56,17 @@ module.exports = (socket) => {
currentRoomId = roomId;
});
socket.on("start-game", () => {
const roomId = getUserRoom(socket.id);
if (roomId && isUserHost(socket.id)) {
if (startGame(roomId)) {
io.to(roomId).emit("game-started");
}
} else {
socket.emit("not-authorized");
}
});
socket.on("send-message", (messageData) => {
const roomId = getUserRoom(socket.id);
if (roomId) {
@ -56,4 +87,15 @@ module.exports = (socket) => {
socket.emit("room-users", users);
}
});
socket.on("check-host-status", () => {
const isHost = isUserHost(socket.id);
socket.emit("host-status", { isHost });
});
socket.on("get-room-code", () => {
if (currentRoomId) {
socket.emit("room-code", currentRoomId);
}
});
}