2024-11-10 16:33:45 -05:00
|
|
|
const {Room} = require('../models/room.js');
|
2024-11-10 15:42:46 -05:00
|
|
|
|
|
|
|
|
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');
|
|
|
|
|
|
2024-11-10 16:33:45 -05:00
|
|
|
const NB_CODE_CHARS = 6;
|
2024-11-10 22:52:04 -05:00
|
|
|
const DEFAULT_HOST = "172.18.0.5:4500" // must be room ip not name
|
2024-11-10 16:33:45 -05:00
|
|
|
|
2024-11-10 15:42:46 -05:00
|
|
|
class RoomsController {
|
|
|
|
|
constructor(options = {}, roomRepository) {
|
|
|
|
|
this.provider = this.createProvider(
|
|
|
|
|
options.provider || process.env.ROOM_PROVIDER || 'cluster',
|
|
|
|
|
options.providerOptions,
|
|
|
|
|
roomRepository
|
|
|
|
|
);
|
|
|
|
|
this.roomRepository = roomRepository;
|
|
|
|
|
this.setupCleanup();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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(`Unknown provider type: ${type}`);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setupCleanup() {
|
|
|
|
|
setInterval(() => {
|
|
|
|
|
this.provider.cleanup().catch(console.error);
|
|
|
|
|
}, 30000);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async createRoom(options = {}) {
|
2024-11-10 16:33:45 -05:00
|
|
|
let roomIdValid = false
|
|
|
|
|
let roomId;
|
|
|
|
|
|
|
|
|
|
while(!roomIdValid){
|
|
|
|
|
roomId = options.roomId || this.generateRoomId();
|
|
|
|
|
roomIdValid = !(await this.provider.getRoomInfo(roomId));
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-10 23:41:03 -05:00
|
|
|
return await this.provider.createRoom(roomId,options);
|
2024-11-10 16:33:45 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async updateRoom(roomId, info) {
|
|
|
|
|
return await this.provider.updateRoomInfo(roomId, {});
|
2024-11-10 15:42:46 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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() {
|
2024-11-10 16:33:45 -05:00
|
|
|
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;
|
2024-11-10 15:42:46 -05:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports = RoomsController;
|