| Server IP : 158.247.231.215 / Your IP : 216.73.216.159 Web Server : Apache/2.4.41 (Ubuntu) System : Linux CTMS 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 User : www-data ( 33) PHP Version : 8.0.30 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /mnt/blockstorage/vrlms_old/ |
Upload File : |
const express = require('express');
const http = require('http');
const WebSocket = require('ws');
const cors = require('cors');
const app = express();
// Enable CORS for all routes
app.use(cors());
const server = http.createServer(app);
const wss = new WebSocket.Server({ server });
const classrooms = {};
// Serve a simple HTML page
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});
wss.on('connection', (ws) => {
ws.on('message', (message) => {
const data = JSON.parse(message);
const { type, payload } = data;
switch (type) {
case 'createClassroom':
classrooms[payload.classroomId] = { teacherSocket: ws };
ws.send(JSON.stringify({ type: 'classroomCreated', payload: payload.classroomId }));
break;
case 'joinClassroom':
classrooms[payload.classroomId].teacherSocket.send(JSON.stringify({ type: 'studentJoined', payload: ws._socket.remoteAddress }));
break;
case 'buttonClicked':
const { classroomId, levelName } = payload;
message = JSON.stringify({ type: 'LoadLevel', 'level':levelName });
broadcastMessage(message);
// classrooms[classroomId] = { teacherSocket: ws };
// classrooms[classroomId].teacherSocket.send(JSON.stringify({ type: 'buttonClicked', payload: { classroomId,levelName } }));
break;
case 'pause':
message = JSON.stringify({ type: 'Pause'});
broadcastMessage(message);
// classrooms[classroomId] = { teacherSocket: ws };
// classrooms[classroomId].teacherSocket.send(JSON.stringify({ type: 'buttonClicked', payload: { classroomId,levelName } }));
break;
case 'video':
broadcastVideoFrame(payload);
default:
// Handle unknown message type
break;
}
});
ws.on('close', () => {
// Implement necessary cleanup logic
});
});
const broadcastVideoFrame = (frameBytes) => {
// console.log(frameBytes);
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
client.send(JSON.stringify({type:"video", data:frameBytes}));
}
});
};
function broadcastMessage(message) {
console.log(message);
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
client.send(message);
}
});
}
// Start the server
const PORT = process.env.PORT || 3300;
server.listen(PORT, () => {
console.log(`WebSocket server is running on port ${PORT}`);
});