krishgokul92 commited on
Commit
f40c2cc
·
verified ·
1 Parent(s): c8838a8

Update server.js

Browse files
Files changed (1) hide show
  1. server.js +13 -33
server.js CHANGED
@@ -1,4 +1,3 @@
1
- // server.js — HF Spaces ready (PORT + 0.0.0.0) with blackout + rooms
2
  const path = require('path');
3
  const express = require('express');
4
  const http = require('http');
@@ -12,59 +11,40 @@ const io = new Server(server, {
12
  cors: { origin: true }
13
  });
14
 
 
15
  app.use(express.static(path.join(__dirname, 'public')));
16
 
17
- // Pretty routes
18
- app.get('/', (req, res) => res.redirect('/admin'));
19
  app.get('/admin', (req, res) => res.sendFile(path.join(__dirname, 'public', 'admin.html')));
20
  app.get('/client', (req, res) => res.sendFile(path.join(__dirname, 'public', 'client.html')));
21
 
22
- // Hugging Face sets PORT (usually 7860). Bind to 0.0.0.0 for container.
23
  const HOST = '0.0.0.0';
24
  const PORT = process.env.PORT || 7860;
25
 
26
- // Helpers to read room/role from connection query
27
- function getRoom(socket) { return (socket.handshake.query.room || 'default').toString(); }
28
- function getRole(socket) { return (socket.handshake.query.role || 'client').toString(); }
29
-
30
  io.on('connection', (socket) => {
31
- const room = getRoom(socket);
32
- const role = getRole(socket);
33
  socket.join(room);
34
 
35
- const emitStats = () => {
36
- const sockets = io.sockets.adapter.rooms.get(room) || new Set();
37
- const clients = Array.from(sockets).map(id => io.sockets.sockets.get(id));
38
- const numAdmins = clients.filter(s => s?.handshake?.query?.role === 'admin').length;
39
- const numClients = clients.length - numAdmins;
40
- io.to(room).emit('stats', { numAdmins, numClients });
41
- };
42
- emitStats();
43
-
44
- // NTP-like sync
45
  socket.on('sync:ping', (msg = {}) => {
46
  const t1 = Date.now();
47
  socket.emit('sync:pong', { t0: msg.t0, t1, t2: Date.now() });
48
  });
49
 
50
- // Commands
51
- socket.on('admin:start', ({ delayMs = 3000, label = '' } = {}) => {
52
- if (role !== 'admin') return;
53
  const startAt = Date.now() + Math.max(500, Number(delayMs));
54
  io.to(room).emit('cmd', { type: 'start', startAt, label });
55
  });
56
- socket.on('admin:stop', () => { if (role === 'admin') io.to(room).emit('cmd', { type: 'stop' }); });
57
- socket.on('admin:reset', () => { if (role === 'admin') io.to(room).emit('cmd', { type: 'reset' }); });
58
-
59
- // Blackout toggle
60
- socket.on('admin:blackout', ({ on = true } = {}) => {
61
- if (role !== 'admin') return;
62
- io.to(room).emit('cmd', { type: 'blackout', on: !!on });
63
- });
64
 
65
- socket.on('disconnect', emitStats);
66
  });
67
 
68
  server.listen(PORT, HOST, () => {
69
- console.log(`Timer server on http://${HOST}:${PORT}`);
70
  });
 
 
1
  const path = require('path');
2
  const express = require('express');
3
  const http = require('http');
 
11
  cors: { origin: true }
12
  });
13
 
14
+ // Serve static files
15
  app.use(express.static(path.join(__dirname, 'public')));
16
 
17
+ // Handle routing for /admin and /client
18
+ app.get('/', (req, res) => res.redirect('/admin')); // Default redirect to admin
19
  app.get('/admin', (req, res) => res.sendFile(path.join(__dirname, 'public', 'admin.html')));
20
  app.get('/client', (req, res) => res.sendFile(path.join(__dirname, 'public', 'client.html')));
21
 
 
22
  const HOST = '0.0.0.0';
23
  const PORT = process.env.PORT || 7860;
24
 
25
+ // Setup WebSocket connection with socket.io
 
 
 
26
  io.on('connection', (socket) => {
27
+ const room = socket.handshake.query.room || 'default';
28
+ const role = socket.handshake.query.role || 'client';
29
  socket.join(room);
30
 
 
 
 
 
 
 
 
 
 
 
31
  socket.on('sync:ping', (msg = {}) => {
32
  const t1 = Date.now();
33
  socket.emit('sync:pong', { t0: msg.t0, t1, t2: Date.now() });
34
  });
35
 
36
+ // Admin commands
37
+ socket.on('admin:start', ({ delayMs = 3000, label = '' }) => {
 
38
  const startAt = Date.now() + Math.max(500, Number(delayMs));
39
  io.to(room).emit('cmd', { type: 'start', startAt, label });
40
  });
41
+ socket.on('admin:stop', () => { io.to(room).emit('cmd', { type: 'stop' }); });
42
+ socket.on('admin:reset', () => { io.to(room).emit('cmd', { type: 'reset' }); });
43
+ socket.on('admin:blackout', ({ on = true }) => { io.to(room).emit('cmd', { type: 'blackout', on }); });
 
 
 
 
 
44
 
45
+ socket.on('disconnect', () => {});
46
  });
47
 
48
  server.listen(PORT, HOST, () => {
49
+ console.log(`Server running on http://${HOST}:${PORT}`);
50
  });