timer / server.js
krishgokul92's picture
Update server.js
651e4af verified
raw
history blame
1.8 kB
const path = require('path');
const express = require('express');
const http = require('http');
const { Server } = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = new Server(server, {
pingInterval: 10000,
pingTimeout: 5000,
cors: { origin: true }
});
// Serve static files from /public
app.use(express.static(path.join(__dirname, 'public')));
// Fix: Ensure routes for /admin and /client work
app.get('/', (req, res) => res.sendFile(path.join(__dirname, 'public', 'admin.html'))); // Default is admin
app.get('/admin', (req, res) => res.sendFile(path.join(__dirname, 'public', 'admin.html')));
app.get('/client', (req, res) => res.sendFile(path.join(__dirname, 'public', 'client.html')));
const HOST = '0.0.0.0';
const PORT = process.env.PORT || 7860;
// Socket handling
io.on('connection', (socket) => {
const room = socket.handshake.query.room || 'default';
const role = socket.handshake.query.role || 'client';
socket.join(room);
socket.on('sync:ping', (msg = {}) => {
const t1 = Date.now();
socket.emit('sync:pong', { t0: msg.t0, t1, t2: Date.now() });
});
// Admin commands
socket.on('admin:start', ({ delayMs = 3000, label = '' }) => {
const startAt = Date.now() + Math.max(500, Number(delayMs));
io.to(room).emit('cmd', { type: 'start', startAt, label });
});
socket.on('admin:stop', () => { io.to(room).emit('cmd', { type: 'stop' }); });
socket.on('admin:reset', () => { io.to(room).emit('cmd', { type: 'reset' }); });
// Blackout toggle
socket.on('admin:blackout', ({ on = true }) => {
io.to(room).emit('cmd', { type: 'blackout', on });
});
socket.on('disconnect', () => {});
});
server.listen(PORT, HOST, () => {
console.log(`Server running on http://${HOST}:${PORT}`);
});