diff --git a/server/app.js b/server/app.js index 5a034f743..c5d8d2737 100644 --- a/server/app.js +++ b/server/app.js @@ -15,10 +15,10 @@ const playbackRouter = require('./routes/playbackRouter.js'); const port = process.env.PORT || config.server.port; // Global Objects -const Timer = require('./classes/Timer.js'); +const EventTimer = require('./classes/EventTimer.js'); // TODO: this should be replaced by some sort of calculation let durationForNow = 5400; -global.timer = new Timer(); +global.timer = new EventTimer(); timer.setupWithSeconds(durationForNow, true); // Create express APP @@ -56,18 +56,51 @@ const io = socketIo(server, { let interval; io.on('connection', (socket) => { - // send initial eventdata to any new clients 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'); @@ -77,10 +110,8 @@ io.on('connection', (socket) => { // send timer events const getApiAndEmit = (socket) => { - const t = timer.getObject(); - // console.log(t) // send current timer - socket.emit('timer', t); + socket.emit('timer', timer.getObject()); }; // Start server diff --git a/server/classes/EventTimer.js b/server/classes/EventTimer.js index e69de29bb..4ffe4c9f9 100644 --- a/server/classes/EventTimer.js +++ b/server/classes/EventTimer.js @@ -0,0 +1,51 @@ +const Timer = require('./Timer'); + +/* + * EventTimer adds functions specific to APP + * namely: + * - Presenter message, text and status + * - Public message, text and status + * + */ + +class EventTimer extends Timer { + presenter = { + text: '', + visible: false, + }; + public = { + text: '', + visible: false, + }; + + constructor() { + super(); + } + + set presenterText(text) { + this.presenter.text = text; + } + + set presenterVisible(state) { + this.presenter.visible = state; + } + + set publicText(text) { + this.public.text = text; + } + + set publicVisible(state) { + this.public.visible = state; + } + + get presenter() { + return this.presenter; + } + + get public() { + return this.public; + } + +} + +module.exports = EventTimer; diff --git a/server/classes/Timer.js b/server/classes/Timer.js index c1246d270..e766ef842 100644 --- a/server/classes/Timer.js +++ b/server/classes/Timer.js @@ -1,3 +1,9 @@ +/* + * Timer implements simple countdown timer functions + * User needs to use setup function to be able to use + * + */ + class Timer { _current = null; _finishAt = null; @@ -116,5 +122,4 @@ class Timer { } } - module.exports = Timer;