forked from robdodson/defcon
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
72 lines (51 loc) · 1.83 KB
/
app.js
File metadata and controls
72 lines (51 loc) · 1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
'use strict';
import express from 'express';
import { createServer } from 'http';
import errorHandler from 'errorhandler';
import expressLayouts from 'express-ejs-layouts';
import config from './config.js';
import { Server as SIO } from 'socket.io';
import Stopwatch from './stopwatch.js';
const app = express();
const server = createServer(app);
const io = new SIO(server, {});
// Configuration
app.set('views', './views');
app.set('view engine', 'ejs');
app.use(expressLayouts);
app.use(express.static('./public'));
server.listen(config.listen, () => {
console.log('server started');
});
function gracefulExit() {
io.close(() => process.exit(0));
}
process.on('SIGINT', () => gracefulExit());
process.on('SIGTERM', () => gracefulExit());
if (process.env.NODE_ENV === 'development') {
app.use(errorHandler({ dumpExceptions: true, showStack: true }));
}
for (const [slug, name] of Object.entries(config.rooms)) {
const stopwatch = new Stopwatch();
const ns = io.of(`/${slug}`);
stopwatch.on('tick:stopwatch', (time) => ns.emit('time', { time: time }));
stopwatch.on('reset:stopwatch', (time) => ns.emit('time', { time: time }));
stopwatch.start();
ns.on('connection', function (socket) {
ns.emit('time', { time: stopwatch.getTime() });
socket.on('click:start', () => stopwatch.start());
socket.on('click:stop', () => stopwatch.stop());
socket.on('click:reset', (time) => stopwatch.reset(time));
});
const roomRouter = express.Router();
roomRouter.get('/', function (req, res) {
res.render('index', { title: name, room: slug });
});
roomRouter.get('/control', function (req, res) {
res.render('control', { title: name, room: slug, timers: config.timers });
});
app.use(`/${slug}`, roomRouter);
}
app.get('/', function (req, res) {
res.render('list', { title: 'Timer', rooms: config.rooms });
});