From 093c8c6e246a3b9c1445264c6ebae49d63cecabf Mon Sep 17 00:00:00 2001 From: Julian Appel Date: Sun, 21 Apr 2024 12:56:00 +0200 Subject: [PATCH] Main timer logic, socketio server and backend endpoints --- scoreboard/controllers/socketio.js | 7 ++++ scoreboard/controllers/timer.js | 60 ++++++++++++++++++++++++++++++ scoreboard/routes/index.js | 19 +++++++++- 3 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 scoreboard/controllers/socketio.js create mode 100644 scoreboard/controllers/timer.js diff --git a/scoreboard/controllers/socketio.js b/scoreboard/controllers/socketio.js new file mode 100644 index 0000000..5778fc4 --- /dev/null +++ b/scoreboard/controllers/socketio.js @@ -0,0 +1,7 @@ +const { Server } = require('socket.io'); + +const io = new Server(3001, { + cors: { origin: "*" } + }); + +module.exports = io \ No newline at end of file diff --git a/scoreboard/controllers/timer.js b/scoreboard/controllers/timer.js new file mode 100644 index 0000000..6ae4e7b --- /dev/null +++ b/scoreboard/controllers/timer.js @@ -0,0 +1,60 @@ +const moment = require('moment'); +const io = require('./socketio') + +let timerInterval; +// let duration = moment.duration(7, 'minutes'); // Initial duration +// let durationLeft = moment.duration(7, 'minutes'); // durationLeft after the timer has been started +let duration = moment.duration(7, 'seconds'); +let durationLeft = moment.duration(10, 'seconds'); + +let isPaused = true; // Status of the timer + +// Function prototypes +function start() {}; +function pause() {}; +function reset() {}; +function end() {}; +function print() {}; + + +function start() { + if(isPaused == true) + { + isPaused = false + + timerInterval = setInterval(() => { // Create Intervalfunction every 1000ms + console.log(print()); // Print durationLeft + io.sockets.emit('timerDurationLeft', print()) // Emit durationLeft to all connected sockets + if(durationLeft.minutes() == 0 && durationLeft.seconds() == 0) // End timer if durationLeft == 00:00 + end() + durationLeft.subtract(1, 'second'); // Subtract a second from from the timer + }, 1000); + } +} + +function pause() { + isPaused = true; // Set status of the timer + clearInterval(timerInterval); // End the execution +} + +function reset() { + durationLeft = duration.clone(); // Set durationLeft to the initial duration + io.sockets.emit('timerDurationLeft', print()) // Emit durationLeft to all connected sockets +} + +function end() { + isPaused = true // Set status of the timer + clearInterval(timerInterval); // End the execution + io.sockets.emit('timerEnded', print()) // Emit end to all connected sockets +} + +function print() +{ + var minutes = (durationLeft.minutes() < 10) ? "0" + durationLeft.minutes() : durationLeft.minutes(); // Create leading zeros for numbers <10 + var seconds = (durationLeft.seconds() < 10) ? "0" + durationLeft.seconds() : durationLeft.seconds(); // Create leading zeros for numbers <10 + return minutes + ":" + seconds +} + +module.exports = { + duration, durationLeft, isPaused, start, pause, reset, end, print +}; \ No newline at end of file diff --git a/scoreboard/routes/index.js b/scoreboard/routes/index.js index ecca96a..15ae2bd 100644 --- a/scoreboard/routes/index.js +++ b/scoreboard/routes/index.js @@ -1,9 +1,26 @@ var express = require('express'); var router = express.Router(); +let io = require('../controllers/socketio') +const timer = require('../controllers/timer') + + + /* GET home page. */ router.get('/', function(req, res, next) { - res.render('index', { title: 'Express' }); + res.render('index', { durationLeft: timer.print()}); }); +io.on('connection', (socket) => { + console.log("A user connected"); + socket.emit("Hello user from server"); + + socket.on('message', (message) => { + console.log(message) + }) + + +}) + + module.exports = router;