mirror of
https://github.com/ets-cfuhrman-pfe/EvalueTonSavoir.git
synced 2025-08-11 21:23:54 -04:00
Redirecting not working
This commit is contained in:
parent
b744284472
commit
d37e6c540a
10 changed files with 59 additions and 28 deletions
|
|
@ -44,7 +44,7 @@ describe('WebSocketService', () => {
|
||||||
|
|
||||||
test('createRoom should emit create-room event', () => {
|
test('createRoom should emit create-room event', () => {
|
||||||
WebsocketService.connect(ENV_VARIABLES.VITE_BACKEND_URL);
|
WebsocketService.connect(ENV_VARIABLES.VITE_BACKEND_URL);
|
||||||
WebsocketService.createRoom();
|
WebsocketService.createRoom('test');
|
||||||
expect(mockSocket.emit).toHaveBeenCalledWith('create-room');
|
expect(mockSocket.emit).toHaveBeenCalledWith('create-room');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import React, { useEffect, useState } from 'react';
|
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 { ENV_VARIABLES } from '../../../constants';
|
||||||
|
|
||||||
import StudentModeQuiz from '../../../components/StudentModeQuiz/StudentModeQuiz';
|
import StudentModeQuiz from '../../../components/StudentModeQuiz/StudentModeQuiz';
|
||||||
|
|
@ -34,15 +34,7 @@ const JoinRoom: React.FC = () => {
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const handleCreateSocket = () => {
|
const handleCreateSocket = () => {
|
||||||
debugger;
|
const socket = webSocketService.connect(`/api/room/${roomName}/socket`);
|
||||||
const socket = io('/', {
|
|
||||||
path: `/api/room/${roomName}/socket`,
|
|
||||||
transports: ['websocket'],
|
|
||||||
autoConnect: true,
|
|
||||||
reconnection: true,
|
|
||||||
reconnectionAttempts: 5,
|
|
||||||
reconnectionDelay: 1000,
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on('join-success', () => {
|
socket.on('join-success', () => {
|
||||||
setIsWaitingForTeacher(true);
|
setIsWaitingForTeacher(true);
|
||||||
|
|
|
||||||
|
|
@ -79,14 +79,19 @@ const ManageRoom: React.FC = () => {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const createWebSocketRoom = async() => {
|
const createWebSocketRoom = async () => {
|
||||||
setConnectingError('');
|
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`);
|
const socket = webSocketService.connect(`/api/room/${room.id}/socket`);
|
||||||
|
|
||||||
socket.on('connect', () => {
|
socket.on('connect', () => {
|
||||||
webSocketService.createRoom();
|
webSocketService.createRoom(room.id);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
socket.on("error", (error) => {
|
||||||
|
console.error("WebSocket server error:", error);
|
||||||
|
});
|
||||||
|
|
||||||
socket.on('connect_error', (error) => {
|
socket.on('connect_error', (error) => {
|
||||||
setConnectingError('Erreur lors de la connexion... Veuillez réessayer');
|
setConnectingError('Erreur lors de la connexion... Veuillez réessayer');
|
||||||
console.error('WebSocket connection error:', error);
|
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).');
|
console.log('Quiz questions not found (cannot update answers without them).');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the students state using the functional form of setStudents
|
// Update the students state using the functional form of setStudents
|
||||||
setStudents((prevStudents) => {
|
setStudents((prevStudents) => {
|
||||||
// print the list of current student names
|
// print the list of current student names
|
||||||
|
|
@ -151,7 +156,7 @@ const ManageRoom: React.FC = () => {
|
||||||
prevStudents.forEach((student) => {
|
prevStudents.forEach((student) => {
|
||||||
console.log(student.name);
|
console.log(student.name);
|
||||||
});
|
});
|
||||||
|
|
||||||
let foundStudent = false;
|
let foundStudent = false;
|
||||||
const updatedStudents = prevStudents.map((student) => {
|
const updatedStudents = prevStudents.map((student) => {
|
||||||
console.log(`Comparing ${student.id} to ${idUser}`);
|
console.log(`Comparing ${student.id} to ${idUser}`);
|
||||||
|
|
@ -171,7 +176,7 @@ const ManageRoom: React.FC = () => {
|
||||||
updatedAnswers = [...student.answers, newAnswer];
|
updatedAnswers = [...student.answers, newAnswer];
|
||||||
}
|
}
|
||||||
return { ...student, answers: updatedAnswers };
|
return { ...student, answers: updatedAnswers };
|
||||||
}
|
}
|
||||||
return student;
|
return student;
|
||||||
});
|
});
|
||||||
if (!foundStudent) {
|
if (!foundStudent) {
|
||||||
|
|
|
||||||
|
|
@ -21,10 +21,14 @@ class WebSocketService {
|
||||||
private socket: Socket | null = null;
|
private socket: Socket | null = null;
|
||||||
|
|
||||||
connect(backendUrl: string): Socket {
|
connect(backendUrl: string): Socket {
|
||||||
// console.log(backendUrl);
|
this.socket = io( '/',{
|
||||||
this.socket = io(`${backendUrl}`, {
|
path: backendUrl,
|
||||||
transports: ['websocket'],
|
transports: ['websocket'],
|
||||||
reconnectionAttempts: 1
|
autoConnect: true,
|
||||||
|
reconnection: true,
|
||||||
|
reconnectionAttempts: 10,
|
||||||
|
reconnectionDelay: 10000,
|
||||||
|
timeout: 20000,
|
||||||
});
|
});
|
||||||
return this.socket;
|
return this.socket;
|
||||||
}
|
}
|
||||||
|
|
@ -37,9 +41,14 @@ class WebSocketService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
createRoom() {
|
createRoom(roomName: string) {
|
||||||
if (this.socket) {
|
if (this.socket) {
|
||||||
this.socket.emit('create-room');
|
if(roomName){
|
||||||
|
this.socket.emit('create-room', {roomName});
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
this.socket.emit('create-room');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,19 @@
|
||||||
import http from "http";
|
import http from "http";
|
||||||
import { Server, ServerOptions } from "socket.io";
|
import { Server, ServerOptions } from "socket.io";
|
||||||
|
|
||||||
// Import setupWebsocket
|
|
||||||
import { setupWebsocket } from "./socket/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
|
// Create HTTP and WebSocket server
|
||||||
const server = http.createServer();
|
const server = http.createServer();
|
||||||
const ioOptions: Partial<ServerOptions> = {
|
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: {
|
cors: {
|
||||||
origin: "*",
|
origin: "*",
|
||||||
methods: ["GET", "POST"],
|
methods: ["GET", "POST"],
|
||||||
|
|
|
||||||
12
quizRoom/package-lock.json
generated
12
quizRoom/package-lock.json
generated
|
|
@ -10,6 +10,7 @@
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@valkey/valkey-glide": "^1.1.0",
|
"@valkey/valkey-glide": "^1.1.0",
|
||||||
|
"dotenv": "^16.4.5",
|
||||||
"http": "^0.0.1-security",
|
"http": "^0.0.1-security",
|
||||||
"socket.io": "^4.8.1"
|
"socket.io": "^4.8.1"
|
||||||
},
|
},
|
||||||
|
|
@ -509,6 +510,17 @@
|
||||||
"node": ">=0.3.1"
|
"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": {
|
"node_modules/engine.io": {
|
||||||
"version": "6.6.2",
|
"version": "6.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz",
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@valkey/valkey-glide": "^1.1.0",
|
"@valkey/valkey-glide": "^1.1.0",
|
||||||
|
"dotenv": "^16.4.5",
|
||||||
"http": "^0.0.1-security",
|
"http": "^0.0.1-security",
|
||||||
"socket.io": "^4.8.1"
|
"socket.io": "^4.8.1"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -88,8 +88,14 @@ export const setupWebsocket = (io: Server): void => {
|
||||||
idQuestion,
|
idQuestion,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
socket.on("error", (error) => {
|
||||||
|
console.error("WebSocket server error:", error);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const generateRoomName = (length = 6): string => {
|
const generateRoomName = (length = 6): string => {
|
||||||
const characters = "0123456789";
|
const characters = "0123456789";
|
||||||
let result = "";
|
let result = "";
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@
|
||||||
"jsonwebtoken": "^9.0.2",
|
"jsonwebtoken": "^9.0.2",
|
||||||
"mongodb": "^6.3.0",
|
"mongodb": "^6.3.0",
|
||||||
"multer": "^1.4.5-lts.1",
|
"multer": "^1.4.5-lts.1",
|
||||||
|
"net": "^1.0.2",
|
||||||
"nodemailer": "^6.9.9",
|
"nodemailer": "^6.9.9",
|
||||||
"socket.io": "^4.7.2",
|
"socket.io": "^4.7.2",
|
||||||
"socket.io-client": "^4.7.2"
|
"socket.io-client": "^4.7.2"
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ class DockerRoomProvider extends BaseRoomProvider {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Env: options.env || []
|
Env: [...options.env || [], `ROOM_ID=${roomId}`]
|
||||||
};
|
};
|
||||||
|
|
||||||
const container = await this.docker.createContainer(containerConfig);
|
const container = await this.docker.createContainer(containerConfig);
|
||||||
|
|
@ -34,11 +34,12 @@ class DockerRoomProvider extends BaseRoomProvider {
|
||||||
|
|
||||||
const containerInfo = await container.inspect();
|
const containerInfo = await container.inspect();
|
||||||
const containerIP = containerInfo.NetworkSettings.IPAddress;
|
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));
|
return await this.roomRepository.create(new Room(roomId, container_name, host, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async deleteRoom(roomId) {
|
async deleteRoom(roomId) {
|
||||||
const container_name = `room_${roomId}`;
|
const container_name = `room_${roomId}`;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue