mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-04 23:18:01 +00:00
119 lines
2.8 KiB
JavaScript
119 lines
2.8 KiB
JavaScript
// get config
|
|
const config = require('./config.json');
|
|
|
|
// dependencies
|
|
const express = require('express');
|
|
const http = require('http');
|
|
const socketIo = require('socket.io');
|
|
const cors = require('cors');
|
|
|
|
// Import Routes
|
|
const eventsRouter = require('./routes/eventsRouter.js');
|
|
const playbackRouter = require('./routes/playbackRouter.js');
|
|
|
|
// Setup default port
|
|
const port = process.env.PORT || config.server.port;
|
|
|
|
// Global Objects
|
|
const EventTimer = require('./classes/EventTimer.js');
|
|
// TODO: this should be replaced by some sort of calculation
|
|
let durationForNow = 5400;
|
|
global.timer = new EventTimer();
|
|
timer.setupWithSeconds(durationForNow, true);
|
|
|
|
// Create express APP
|
|
const app = express();
|
|
|
|
// setup cors for all routes
|
|
app.use(cors());
|
|
|
|
// Implement middleware
|
|
app.use(express.urlencoded({ extended: true }));
|
|
app.use(express.json());
|
|
|
|
// Implement route endpoints
|
|
app.use('/events', eventsRouter);
|
|
app.use('/playback', playbackRouter);
|
|
|
|
// Implement route for errors
|
|
app.use((err, req, res, next) => {
|
|
console.error(err.stack);
|
|
res.status(500).send('Something broke!');
|
|
});
|
|
|
|
// create HTTP server
|
|
const server = http.createServer(app);
|
|
|
|
// initialise socketIO server
|
|
const io = socketIo(server, {
|
|
cors: {
|
|
origin: 'http://localhost:3000',
|
|
methods: ['GET', 'POST'],
|
|
},
|
|
});
|
|
|
|
// interval function
|
|
let interval;
|
|
|
|
io.on('connection', (socket) => {
|
|
console.log('New client connected');
|
|
|
|
// timer API
|
|
socket.emit('timer', timer.getObject());
|
|
|
|
// avoid multiple intervals
|
|
if (interval) {
|
|
clearInterval(interval);
|
|
}
|
|
// set callback for timer events
|
|
interval = setInterval(() => getApiAndEmit(socket), config.timer.refresh);
|
|
|
|
socket.on('get-timer', () => {
|
|
socket.emit('timer', timer.getObject());
|
|
});
|
|
|
|
// playback API
|
|
socket.on('set-presenter-text', (data) => {
|
|
timer.presenterText = data;
|
|
socket.emit('messages-presenter', timer.presenter);
|
|
});
|
|
|
|
socket.on('set-presenter-visible', (data) => {
|
|
timer.presenterVisible = data;
|
|
socket.emit('messages-presenter', timer.presenter);
|
|
});
|
|
|
|
socket.on('get-presenter', () => {
|
|
socket.emit('messages-presenter', timer.presenter);
|
|
});
|
|
|
|
socket.on('set-public-text', (data) => {
|
|
timer.publicText = data;
|
|
socket.emit('messages-public', timer.public);
|
|
});
|
|
|
|
socket.on('set-public-visible', (data) => {
|
|
timer.publicVisible = data;
|
|
socket.emit('messages-public', timer.public);
|
|
});
|
|
|
|
socket.on('get-public', () => {
|
|
socket.emit('messages-public', timer.public);
|
|
});
|
|
|
|
// handle client disconnect
|
|
socket.on('disconnect', () => {
|
|
console.log('Client disconnected');
|
|
clearInterval(interval);
|
|
});
|
|
});
|
|
|
|
// send timer events
|
|
const getApiAndEmit = (socket) => {
|
|
// send current timer
|
|
socket.emit('timer', timer.getObject());
|
|
};
|
|
|
|
// Start server
|
|
server.listen(port, () => console.log(`Listening on port ${port}`));
|