101 lines
2.9 KiB
JavaScript
101 lines
2.9 KiB
JavaScript
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);
|
|
}
|
|
});
|
|
} |