Redirecting not working

This commit is contained in:
MathieuSevignyLavallee 2024-11-11 15:16:59 -05:00
parent b744284472
commit d37e6c540a
10 changed files with 59 additions and 28 deletions

View file

@ -44,7 +44,7 @@ describe('WebSocketService', () => {
test('createRoom should emit create-room event', () => {
WebsocketService.connect(ENV_VARIABLES.VITE_BACKEND_URL);
WebsocketService.createRoom();
WebsocketService.createRoom('test');
expect(mockSocket.emit).toHaveBeenCalledWith('create-room');
});

View file

@ -1,6 +1,6 @@
import React, { useEffect, useState } from 'react';
import { io,Socket } from 'socket.io-client';
import { Socket } from 'socket.io-client';
//import { ENV_VARIABLES } from '../../../constants';
import StudentModeQuiz from '../../../components/StudentModeQuiz/StudentModeQuiz';
@ -34,15 +34,7 @@ const JoinRoom: React.FC = () => {
}, []);
const handleCreateSocket = () => {
debugger;
const socket = io('/', {
path: `/api/room/${roomName}/socket`,
transports: ['websocket'],
autoConnect: true,
reconnection: true,
reconnectionAttempts: 5,
reconnectionDelay: 1000,
});
const socket = webSocketService.connect(`/api/room/${roomName}/socket`);
socket.on('join-success', () => {
setIsWaitingForTeacher(true);

View file

@ -79,14 +79,19 @@ const ManageRoom: React.FC = () => {
}
};
const createWebSocketRoom = async() => {
const createWebSocketRoom = async () => {
setConnectingError('');
const room = await(await fetch('/api/room',{method:'post'})).json();
const room = await (await fetch('/api/room', { method: 'post' })).json();
const socket = webSocketService.connect(`/api/room/${room.id}/socket`);
socket.on('connect', () => {
webSocketService.createRoom();
webSocketService.createRoom(room.id);
});
socket.on("error", (error) => {
console.error("WebSocket server error:", error);
});
socket.on('connect_error', (error) => {
setConnectingError('Erreur lors de la connexion... Veuillez réessayer');
console.error('WebSocket connection error:', error);
@ -143,7 +148,7 @@ const ManageRoom: React.FC = () => {
console.log('Quiz questions not found (cannot update answers without them).');
return;
}
// Update the students state using the functional form of setStudents
setStudents((prevStudents) => {
// print the list of current student names
@ -151,7 +156,7 @@ const ManageRoom: React.FC = () => {
prevStudents.forEach((student) => {
console.log(student.name);
});
let foundStudent = false;
const updatedStudents = prevStudents.map((student) => {
console.log(`Comparing ${student.id} to ${idUser}`);
@ -171,7 +176,7 @@ const ManageRoom: React.FC = () => {
updatedAnswers = [...student.answers, newAnswer];
}
return { ...student, answers: updatedAnswers };
}
}
return student;
});
if (!foundStudent) {

View file

@ -21,10 +21,14 @@ class WebSocketService {
private socket: Socket | null = null;
connect(backendUrl: string): Socket {
// console.log(backendUrl);
this.socket = io(`${backendUrl}`, {
this.socket = io( '/',{
path: backendUrl,
transports: ['websocket'],
reconnectionAttempts: 1
autoConnect: true,
reconnection: true,
reconnectionAttempts: 10,
reconnectionDelay: 10000,
timeout: 20000,
});
return this.socket;
}
@ -37,9 +41,14 @@ class WebSocketService {
}
}
createRoom() {
createRoom(roomName: string) {
if (this.socket) {
this.socket.emit('create-room');
if(roomName){
this.socket.emit('create-room', {roomName});
}
else{
this.socket.emit('create-room');
}
}
}

View file

@ -1,15 +1,19 @@
import http from "http";
import { Server, ServerOptions } from "socket.io";
// Import setupWebsocket
import { setupWebsocket } from "./socket/setupWebSocket";
import dotenv from "dotenv";
const port = 4500;
// Load environment variables
dotenv.config();
const port = 4500;
const roomId = process.env.ROOM_ID; // Load roomId from environment variable
console.log(`I am: /api/room/${roomId}/socket`);
// Create HTTP and WebSocket server
const server = http.createServer();
const ioOptions: Partial<ServerOptions> = {
path: '/api/room/975239/socket', // TODO : use env variable to set room id
path: `/api/room/${roomId}/socket`, // Use roomId from env variable
cors: {
origin: "*",
methods: ["GET", "POST"],

View file

@ -10,6 +10,7 @@
"license": "ISC",
"dependencies": {
"@valkey/valkey-glide": "^1.1.0",
"dotenv": "^16.4.5",
"http": "^0.0.1-security",
"socket.io": "^4.8.1"
},
@ -509,6 +510,17 @@
"node": ">=0.3.1"
}
},
"node_modules/dotenv": {
"version": "16.4.5",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
"integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://dotenvx.com"
}
},
"node_modules/engine.io": {
"version": "6.6.2",
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz",

View file

@ -18,6 +18,7 @@
},
"dependencies": {
"@valkey/valkey-glide": "^1.1.0",
"dotenv": "^16.4.5",
"http": "^0.0.1-security",
"socket.io": "^4.8.1"
}

View file

@ -88,8 +88,14 @@ export const setupWebsocket = (io: Server): void => {
idQuestion,
});
});
socket.on("error", (error) => {
console.error("WebSocket server error:", error);
});
});
const generateRoomName = (length = 6): string => {
const characters = "0123456789";
let result = "";

View file

@ -22,6 +22,7 @@
"jsonwebtoken": "^9.0.2",
"mongodb": "^6.3.0",
"multer": "^1.4.5-lts.1",
"net": "^1.0.2",
"nodemailer": "^6.9.9",
"socket.io": "^4.7.2",
"socket.io-client": "^4.7.2"

View file

@ -26,7 +26,7 @@ class DockerRoomProvider extends BaseRoomProvider {
]
}
},
Env: options.env || []
Env: [...options.env || [], `ROOM_ID=${roomId}`]
};
const container = await this.docker.createContainer(containerConfig);
@ -34,11 +34,12 @@ class DockerRoomProvider extends BaseRoomProvider {
const containerInfo = await container.inspect();
const containerIP = containerInfo.NetworkSettings.IPAddress;
const host = `${containerIP}:4500`;
const host = `${containerIP}:4500`;
return await this.roomRepository.create(new Room(roomId, container_name, host, 0));
}
async deleteRoom(roomId) {
const container_name = `room_${roomId}`;