{
width: '100%'
}}
>
- {quizStarted && (
+ {(
{students.length}/60
diff --git a/client/src/services/WebsocketService.tsx b/client/src/services/WebsocketService.tsx
index be1d32f..3cacf36 100644
--- a/client/src/services/WebsocketService.tsx
+++ b/client/src/services/WebsocketService.tsx
@@ -51,13 +51,26 @@ class WebSocketService {
}
}
+ // deleteRoom(roomName: string) {
+ // console.log('WebsocketService: deleteRoom', roomName);
+ // if (this.socket) {
+ // console.log('WebsocketService: emit: delete-room', roomName);
+ // this.socket.emit('delete-room', roomName);
+ // }
+ // }
+
nextQuestion(roomName: string, question: unknown) {
+ console.log('WebsocketService: nextQuestion', roomName, question);
+ if (!question) {
+ throw new Error('WebsocketService: nextQuestion: question is null');
+ }
if (this.socket) {
this.socket.emit('next-question', { roomName, question });
}
}
launchStudentModeQuiz(roomName: string, questions: unknown) {
+ console.log('WebsocketService: launchStudentModeQuiz', roomName, questions, this.socket);
if (this.socket) {
this.socket.emit('launch-student-mode', { roomName, questions });
}
@@ -75,21 +88,9 @@ class WebSocketService {
}
}
- submitAnswer(answerData: AnswerSubmissionToBackendType
- // roomName: string,
- // answer: string | number | boolean,
- // username: string,
- // idQuestion: string
- ) {
+ submitAnswer(answerData: AnswerSubmissionToBackendType) {
if (this.socket) {
- this.socket?.emit('submit-answer',
- // {
- // answer: answer,
- // roomName: roomName,
- // username: username,
- // idQuestion: idQuestion
- // }
- answerData
+ this.socket?.emit('submit-answer', answerData
);
}
}
diff --git a/server/__tests__/socket.test.js b/server/__tests__/socket.test.js
index 95c404f..739d79d 100644
--- a/server/__tests__/socket.test.js
+++ b/server/__tests__/socket.test.js
@@ -60,45 +60,42 @@ describe("websocket server", () => {
});
test("should create a room", (done) => {
- teacherSocket.emit("create-room", "room1");
teacherSocket.on("create-success", (roomName) => {
expect(roomName).toBe("ROOM1");
done();
});
+ teacherSocket.emit("create-room", "room1");
});
test("should not create a room if it already exists", (done) => {
- teacherSocket.emit("create-room", "room1");
teacherSocket.on("create-failure", () => {
done();
});
+ teacherSocket.emit("create-room", "room1");
});
test("should join a room", (done) => {
- studentSocket.emit("join-room", {
- enteredRoomName: "ROOM1",
- username: "student1",
- });
- studentSocket.on("join-success", () => {
+ studentSocket.on("join-success", (roomName) => {
+ expect(roomName).toBe("ROOM1");
done();
});
+ studentSocket.emit("join-room", {
+ enteredRoomName: "room1",
+ username: "student1",
+ });
});
test("should not join a room if it does not exist", (done) => {
+ studentSocket.on("join-failure", () => {
+ done();
+ });
studentSocket.emit("join-room", {
enteredRoomName: "ROOM2",
username: "student1",
});
- studentSocket.on("join-failure", () => {
- done();
- });
});
test("should launch student mode", (done) => {
- teacherSocket.emit("launch-student-mode", {
- roomName: "ROOM1",
- questions: [{ question: "question1" }, { question: "question2" }],
- });
studentSocket.on("launch-student-mode", (questions) => {
expect(questions).toEqual([
{ question: "question1" },
@@ -106,26 +103,24 @@ describe("websocket server", () => {
]);
done();
});
+ teacherSocket.emit("launch-student-mode", {
+ roomName: "ROOM1",
+ questions: [{ question: "question1" }, { question: "question2" }],
+ });
});
test("should send next question", (done) => {
- teacherSocket.emit("next-question", {
- roomName: "ROOM1",
- question: { question: "question2" },
- });
studentSocket.on("next-question", (question) => {
expect(question).toEqual({ question: "question2" });
done();
});
+ teacherSocket.emit("next-question", {
+ roomName: "ROOM1",
+ question: { question: "question2" },
+ });
});
test("should send answer", (done) => {
- studentSocket.emit("submit-answer", {
- roomName: "ROOM1",
- username: "student1",
- answer: "answer1",
- idQuestion: 1,
- });
teacherSocket.on("submit-answer-room", (answer) => {
expect(answer).toEqual({
idUser: studentSocket.id,
@@ -135,32 +130,38 @@ describe("websocket server", () => {
});
done();
});
+ studentSocket.emit("submit-answer", {
+ roomName: "ROOM1",
+ username: "student1",
+ answer: "answer1",
+ idQuestion: 1,
+ });
});
test("should not join a room if no room name is provided", (done) => {
+ studentSocket.on("join-failure", () => {
+ done();
+ });
studentSocket.emit("join-room", {
enteredRoomName: "",
username: "student1",
});
- studentSocket.on("join-failure", () => {
- done();
- });
});
test("should not join a room if the username is not provided", (done) => {
- studentSocket.emit("join-room", { enteredRoomName: "ROOM2", username: "" });
studentSocket.on("join-failure", () => {
done();
});
+ studentSocket.emit("join-room", { enteredRoomName: "ROOM2", username: "" });
});
test("should end quiz", (done) => {
- teacherSocket.emit("end-quiz", {
- roomName: "ROOM1",
- });
studentSocket.on("end-quiz", () => {
done();
});
+ teacherSocket.emit("end-quiz", {
+ roomName: "ROOM1",
+ });
});
test("should disconnect", (done) => {
diff --git a/server/socket/socket.js b/server/socket/socket.js
index f706c7e..393135c 100644
--- a/server/socket/socket.js
+++ b/server/socket/socket.js
@@ -6,7 +6,7 @@ const setupWebsocket = (io) => {
io.on("connection", (socket) => {
if (totalConnections >= MAX_TOTAL_CONNECTIONS) {
- console.log("Connection limit reached. Disconnecting client.");
+ console.log("socket.js: Connection limit reached. Disconnecting client.");
socket.emit(
"join-failure",
"Le nombre maximum de connexions a été atteint"
@@ -17,46 +17,46 @@ const setupWebsocket = (io) => {
totalConnections++;
console.log(
- "A user connected:",
+ "socket.js: A user connected:",
socket.id,
"| Total connections:",
totalConnections
);
socket.on("create-room", (sentRoomName) => {
- console.log(`Demande de création de salle avec le nom : ${sentRoomName}`);
+ console.log(`socket.js: Demande de création de salle avec le nom : ${sentRoomName}`);
if (sentRoomName) {
const roomName = sentRoomName.toUpperCase();
if (!io.sockets.adapter.rooms.get(roomName)) {
socket.join(roomName);
socket.emit("create-success", roomName);
- console.log(`Salle créée avec succès : ${roomName}`);
+ console.log(`socket.js: Salle créée avec succès : ${roomName}`);
} else {
socket.emit("create-failure", `La salle ${roomName} existe déjà.`);
- console.log(`Échec de création : ${roomName} existe déjà`);
+ console.log(`socket.js: Échec de création : ${roomName} existe déjà`);
}
}
- console.log(
- "Salles existantes après la tentative de création : ",
- Array.from(io.sockets.adapter.rooms.keys())
- );
+ reportSalles();
});
+
+ function reportSalles() {
+ console.log("socket.js: Salles existantes :", Array.from(io.sockets.adapter.rooms.keys()));
+ }
socket.on("join-room", ({ enteredRoomName, username }) => {
const roomToCheck = enteredRoomName.toUpperCase();
console.log(
- `Requête de connexion : salle="${roomToCheck}", utilisateur="${username}"`
- );
- console.log(
- "Salles existantes :",
- Array.from(io.sockets.adapter.rooms.keys())
+ `socket.js: Requête de connexion : salle="${roomToCheck}", utilisateur="${username}"`
);
+ reportSalles();
if (io.sockets.adapter.rooms.has(roomToCheck)) {
+ console.log("socket.js: La salle existe");
const clientsInRoom = io.sockets.adapter.rooms.get(roomToCheck).size;
if (clientsInRoom <= MAX_USERS_PER_ROOM) {
+ console.log("socket.js: La salle n'est pas pleine avec ", clientsInRoom, " utilisateurs");
const newStudent = {
id: socket.id,
name: username,
@@ -64,17 +64,20 @@ const setupWebsocket = (io) => {
};
socket.join(roomToCheck);
socket.to(roomToCheck).emit("user-joined", newStudent);
- socket.emit("join-success");
+ socket.emit("join-success", roomToCheck);
} else {
+ console.log("socket.js: La salle est pleine avec ", clientsInRoom, " utilisateurs");
socket.emit("join-failure", "La salle est remplie");
}
} else {
+ console.log("socket.js: La salle n'existe pas");
socket.emit("join-failure", "Le nom de la salle n'existe pas");
}
});
socket.on("next-question", ({ roomName, question }) => {
- // console.log("next-question", roomName, question);
+ console.log("socket.js: next-question", roomName, question);
+ console.log("socket.js: rediffusion de la question", question);
socket.to(roomName).emit("next-question", question);
});
@@ -83,22 +86,26 @@ const setupWebsocket = (io) => {
});
socket.on("end-quiz", ({ roomName }) => {
+ console.log("socket.js: end-quiz", roomName);
socket.to(roomName).emit("end-quiz");
+ io.sockets.adapter.rooms.delete(roomName);
+ reportSalles();
});
socket.on("message", (data) => {
- console.log("Received message from", socket.id, ":", data);
+ console.log("socket.js: Received message from", socket.id, ":", data);
});
socket.on("disconnect", () => {
totalConnections--;
console.log(
- "A user disconnected:",
+ "socket.js: A user disconnected:",
socket.id,
"| Total connections:",
totalConnections
);
-
+ reportSalles();
+
for (const [room] of io.sockets.adapter.rooms) {
if (room !== socket.id) {
io.to(room).emit("user-disconnected", socket.id);