From f874877478d5af137eb0280febc7fc5b2a4cab9e Mon Sep 17 00:00:00 2001 From: Andrey Khlivnyuk Date: Tue, 27 Nov 2018 21:49:44 +0300 Subject: [PATCH] Set up websocket server, connect it to the API for triggering client updated when data on server is 100% changed. --- db.js | 2 ++ index.js | 1 + routes/TimersRouter.js | 8 +++++++- socket.js | 25 +++++++++++++++---------- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/db.js b/db.js index bd5e53c..500f316 100644 --- a/db.js +++ b/db.js @@ -8,6 +8,8 @@ const db = low(adapter); const timersDb = db.get('timers'); +module.exports.getAllTimers = () => timersDb.value(); + module.exports.addTimer = timer => { const newTimer = { id: shortId.generate(), diff --git a/index.js b/index.js index c6629b0..9acce68 100644 --- a/index.js +++ b/index.js @@ -9,6 +9,7 @@ const WebsocketServer = require('./socket'); const app = express(); const WSS = new WebsocketServer(5001); +module.exports.WSS = WSS; /** * Express API routes diff --git a/routes/TimersRouter.js b/routes/TimersRouter.js index 1f72311..01da570 100644 --- a/routes/TimersRouter.js +++ b/routes/TimersRouter.js @@ -2,6 +2,7 @@ const express = require('express'); const router = express.Router(); const bodyParser = require('body-parser'); const db = require('../db'); +const { WSS } = require('../index'); router.get('/', getTimers); router.get('/:id', getTimer); @@ -34,6 +35,7 @@ function updateTimer(req, res) { if (db.getTimerById(id)) { db.updateTimer(timer); res.sendStatus(200); + WSS.triggerClientsToUpdateData(); } res.sendStatus(404); } @@ -48,6 +50,7 @@ function addTimer(request, response) { const timer = { title, minutes, seconds }; db.addTimer(timer); response.sendStatus(200); + WSS.triggerClientsToUpdateData(); } } @@ -59,21 +62,24 @@ function deleteTimer(request, response) { } else if (id) { db.deleteTimer(id); response.sendStatus(200); + WSS.triggerClientsToUpdateData(); } } function deleteAllTimers(req, res) { db.deleteAllTimers(); res.sendStatus(200); + WSS.triggerClientsToUpdateData(); } - function deleteTimerById(request, response) { const { id } = request.params; if (!id) { response.sendStatus(400); } else { db.deleteTimer({ id }); + response.sendStatus(200); + WSS.triggerClientsToUpdateData(); } } diff --git a/socket.js b/socket.js index ab0923b..1bc29be 100644 --- a/socket.js +++ b/socket.js @@ -1,21 +1,26 @@ const WebSocket = require('ws'); +const DB = require('./db'); class WebsocketServer { constructor(port) { this.server = new WebSocket.Server({ port }); - this.server.on('connection', socket => { - socket.onmessage = message => { - console.log(`Message: ${message.data}`); - }; - socket.send(JSON.stringify({hello: 'brother'})) + this.server.addListener('connection', function connection(socket) { + socket.send('Connected succesfully'); + + socket.on('message', function incoming(message) { + switch(message) { + + } + }); }); + } - this.server.on('close', listener => { - console.log(`Connection closed: ${listener}`); + triggerClientsToUpdateData() { + this.server.clients.forEach(client => { + if (client.readyState === WebSocket.OPEN) { + client.send(DB.getAllTimers()); + } }); - this.server.on('message', message => { - - }) } }