mirror of
https://github.com/ets-cfuhrman-pfe/EvalueTonSavoir.git
synced 2025-08-11 21:23:54 -04:00
95 lines
2.7 KiB
JavaScript
95 lines
2.7 KiB
JavaScript
|
|
const {Room} = require('../models/room.js');
|
||
|
|
|
||
|
|
const BaseRoomProvider = require('../roomsProviders/base-provider.js');
|
||
|
|
//const ClusterRoomProvider = require('../roomsProviders/cluster-provider.js');
|
||
|
|
const DockerRoomProvider = require('../roomsProviders/docker-provider.js');
|
||
|
|
//const KubernetesRoomProvider = require('../roomsProviders/kubernetes-provider');
|
||
|
|
|
||
|
|
const NB_CODE_CHARS = 6;
|
||
|
|
const NB_MS_UPDATE_ROOM = 1000;
|
||
|
|
const NB_MS_CLEANUP = 30000;
|
||
|
|
|
||
|
|
class RoomsController {
|
||
|
|
constructor(options = {}, roomRepository) {
|
||
|
|
this.provider = this.createProvider(
|
||
|
|
options.provider || process.env.ROOM_PROVIDER || 'cluster',
|
||
|
|
options.providerOptions,
|
||
|
|
roomRepository
|
||
|
|
);
|
||
|
|
this.roomRepository = roomRepository;
|
||
|
|
this.setupTasks();
|
||
|
|
}
|
||
|
|
|
||
|
|
createProvider(type, options, repository) {
|
||
|
|
switch (type) {
|
||
|
|
/*
|
||
|
|
case 'cluster':
|
||
|
|
return new ClusterRoomProvider(options, this.roomRepository);
|
||
|
|
*/
|
||
|
|
// Uncomment these as needed
|
||
|
|
case 'docker':
|
||
|
|
return new DockerRoomProvider(options, repository);
|
||
|
|
/*
|
||
|
|
case 'kubernetes':
|
||
|
|
return new KubernetesRoomProvider(options);
|
||
|
|
*/
|
||
|
|
default:
|
||
|
|
throw new Error(`Type d'approvisionement inconnu: ${type}`);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
async setupTasks(){
|
||
|
|
await this.provider.syncInstantiatedRooms();
|
||
|
|
// Update rooms
|
||
|
|
setInterval(() => {
|
||
|
|
this.provider.updateRoomsInfo().catch(console.error);
|
||
|
|
}, NB_MS_UPDATE_ROOM);
|
||
|
|
|
||
|
|
// Cleanup rooms
|
||
|
|
setInterval(() => {
|
||
|
|
this.provider.cleanup().catch(console.error);
|
||
|
|
}, NB_MS_CLEANUP);
|
||
|
|
}
|
||
|
|
|
||
|
|
async createRoom(options = {}) {
|
||
|
|
let roomIdValid = false
|
||
|
|
let roomId;
|
||
|
|
|
||
|
|
while(!roomIdValid){
|
||
|
|
roomId = options.roomId || this.generateRoomId();
|
||
|
|
roomIdValid = !(await this.provider.getRoomInfo(roomId));
|
||
|
|
}
|
||
|
|
|
||
|
|
return await this.provider.createRoom(roomId,options);
|
||
|
|
}
|
||
|
|
|
||
|
|
async updateRoom(roomId, info) {
|
||
|
|
return await this.provider.updateRoomInfo(roomId, {});
|
||
|
|
}
|
||
|
|
|
||
|
|
async deleteRoom(roomId) {
|
||
|
|
return await this.provider.deleteRoom(roomId);
|
||
|
|
}
|
||
|
|
|
||
|
|
async getRoomStatus(roomId) {
|
||
|
|
return await this.provider.getRoomStatus(roomId);
|
||
|
|
}
|
||
|
|
|
||
|
|
async listRooms() {
|
||
|
|
return await this.provider.listRooms();
|
||
|
|
}
|
||
|
|
|
||
|
|
generateRoomId() {
|
||
|
|
const characters = "0123456789";
|
||
|
|
let result = "";
|
||
|
|
for (let i = 0; i < NB_CODE_CHARS; i++) {
|
||
|
|
result += characters.charAt(
|
||
|
|
Math.floor(Math.random() * characters.length)
|
||
|
|
);
|
||
|
|
}
|
||
|
|
return result;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
module.exports = RoomsController;
|