EvalueTonSavoir/server/socket/socket.js

132 lines
4.1 KiB
JavaScript
Raw Permalink Normal View History

2024-03-29 20:08:34 -04:00
const MAX_USERS_PER_ROOM = 60;
const MAX_TOTAL_CONNECTIONS = 2000;
const setupWebsocket = (io) => {
let totalConnections = 0;
io.on("connection", (socket) => {
if (totalConnections >= MAX_TOTAL_CONNECTIONS) {
console.log("socket.js: Connection limit reached. Disconnecting client.");
2024-03-29 20:08:34 -04:00
socket.emit(
"join-failure",
"Le nombre maximum de connexions a été atteint"
2024-03-29 20:08:34 -04:00
);
socket.disconnect(true);
return;
}
totalConnections++;
2024-10-30 17:19:11 -04:00
console.log(
"socket.js: A user connected:",
2024-10-30 17:19:11 -04:00
socket.id,
"| Total connections:",
totalConnections
);
2024-03-29 20:08:34 -04:00
2025-02-20 00:19:32 -05:00
socket.on("create-room", (sentRoomName) => {
console.log(`socket.js: Demande de création de salle avec le nom : ${sentRoomName}`);
2025-02-21 20:15:32 -05:00
2025-02-20 00:19:32 -05:00
if (sentRoomName) {
const roomName = sentRoomName.toUpperCase();
if (!io.sockets.adapter.rooms.get(roomName)) {
2024-03-29 20:08:34 -04:00
socket.join(roomName);
socket.emit("create-success", roomName);
console.log(`socket.js: Salle créée avec succès : ${roomName}`);
2025-02-20 00:19:32 -05:00
} else {
2025-02-21 20:15:32 -05:00
socket.emit("create-failure", `La salle ${roomName} existe déjà.`);
console.log(`socket.js: Échec de création : ${roomName} existe déjà`);
2025-02-20 00:19:32 -05:00
}
2024-03-29 20:08:34 -04:00
}
reportSalles();
2025-02-20 00:19:32 -05:00
});
function reportSalles() {
console.log("socket.js: Salles existantes :", Array.from(io.sockets.adapter.rooms.keys()));
}
2024-03-29 20:08:34 -04:00
socket.on("join-room", ({ enteredRoomName, username }) => {
2025-02-21 20:15:32 -05:00
const roomToCheck = enteredRoomName.toUpperCase();
console.log(
`socket.js: Requête de connexion : salle="${roomToCheck}", utilisateur="${username}"`
2025-02-21 20:15:32 -05:00
);
reportSalles();
2025-02-21 20:15:32 -05:00
if (io.sockets.adapter.rooms.has(roomToCheck)) {
console.log("socket.js: La salle existe");
2025-02-21 20:15:32 -05:00
const clientsInRoom = io.sockets.adapter.rooms.get(roomToCheck).size;
2024-03-29 20:08:34 -04:00
if (clientsInRoom <= MAX_USERS_PER_ROOM) {
console.log("socket.js: La salle n'est pas pleine avec ", clientsInRoom, " utilisateurs");
2024-09-25 14:53:17 -04:00
const newStudent = {
id: socket.id,
name: username,
answers: [],
};
2025-02-21 20:15:32 -05:00
socket.join(roomToCheck);
socket.to(roomToCheck).emit("user-joined", newStudent);
socket.emit("join-success", roomToCheck);
2024-03-29 20:08:34 -04:00
} else {
console.log("socket.js: La salle est pleine avec ", clientsInRoom, " utilisateurs");
2024-03-29 20:08:34 -04:00
socket.emit("join-failure", "La salle est remplie");
}
} else {
console.log("socket.js: La salle n'existe pas");
2024-03-29 20:08:34 -04:00
socket.emit("join-failure", "Le nom de la salle n'existe pas");
}
});
socket.on("next-question", ({ roomName, question }) => {
console.log("socket.js: next-question", roomName, question);
console.log("socket.js: rediffusion de la question", question);
2024-03-29 20:08:34 -04:00
socket.to(roomName).emit("next-question", question);
});
socket.on("launch-teacher-mode", ({ roomName, questions }) => {
socket.to(roomName).emit("launch-teacher-mode", questions);
});
2024-03-29 20:08:34 -04:00
socket.on("launch-student-mode", ({ roomName, questions }) => {
socket.to(roomName).emit("launch-student-mode", questions);
});
socket.on("end-quiz", ({ roomName }) => {
console.log("socket.js: end-quiz", roomName);
2024-03-29 20:08:34 -04:00
socket.to(roomName).emit("end-quiz");
io.sockets.adapter.rooms.delete(roomName);
reportSalles();
2024-03-29 20:08:34 -04:00
});
socket.on("message", (data) => {
console.log("socket.js: Received message from", socket.id, ":", data);
2024-03-29 20:08:34 -04:00
});
socket.on("disconnect", () => {
totalConnections--;
console.log(
"socket.js: A user disconnected:",
2024-03-29 20:08:34 -04:00
socket.id,
"| Total connections:",
totalConnections
);
reportSalles();
2024-03-29 20:08:34 -04:00
for (const [room] of io.sockets.adapter.rooms) {
if (room !== socket.id) {
io.to(room).emit("user-disconnected", socket.id);
}
}
});
socket.on("submit-answer", ({ roomName, username, answer, idQuestion }) => {
socket.to(roomName).emit("submit-answer-room", {
2024-03-29 20:08:34 -04:00
idUser: socket.id,
username,
answer,
idQuestion,
});
});
});
};
module.exports = { setupWebsocket };