const { connectUserToRoom, roomExists, disconnectUser, getUserRoom, getRoomUsers, isRoomOpen, startGame, isUserHost } = require("../controller/room"); module.exports = (io) => (socket) => { let currentRoomId = null; let currentUser = null; socket.on("disconnect", () => { const roomId = getUserRoom(socket.id); if (roomId) socket.to(roomId).emit("user-disconnected", socket.id); disconnectUser(socket.id); }); socket.on("join-room", ({roomId, name}) => { if (currentRoomId) return socket.emit("already-in-room", currentRoomId); roomId = roomId.toString().toUpperCase(); 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); } }); socket.on("create-room", ({name}) => { if (!name) return socket.emit("room-name-required"); const roomId = Math.random().toString(36).substring(7).toUpperCase(); currentUser = {id: socket.id, name: name?.toString()}; connectUserToRoom(roomId, currentUser); socket.join(roomId); socket.emit("room-created", roomId); 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) { socket.to(roomId).emit("chat-message", messageData); } }); socket.on("get-user-info", () => { if (currentUser) { socket.emit("user-info", currentUser); } }); socket.on("get-room-users", () => { const roomId = getUserRoom(socket.id); if (roomId) { const users = getRoomUsers(roomId); 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); } }); }