diff --git a/scripts/nfc-poll-wrapper.sh b/scripts/nfc-poll-wrapper.sh index 384a9e769e46e133ec1c1185a6e3ce4029d07ba5..21ef17ef29b47cf5497408edb33afabac662a2dc 100755 --- a/scripts/nfc-poll-wrapper.sh +++ b/scripts/nfc-poll-wrapper.sh @@ -7,8 +7,8 @@ do then echo $res echo "11ff11 0.2" > /dev/rgb_pipe + sleep 1 else echo "ff1111 0.2" > /dev/rgb_pipe fi - sleep 1 done diff --git a/server/index.js b/server/index.js index 7efe6a45dcd3ce7cd31425cddd23f4946614f49e..39c74b06a2c9a4a45022d796afd446af84b02976 100644 --- a/server/index.js +++ b/server/index.js @@ -4,36 +4,45 @@ const { uuid, fontSize, rowHeight, port, api, } = require('./config'); -const dummyResponse = require('./dummyResponse.json'); - const io = require('socket.io')(port || 3000); const { createSignedJWT, interval } = require('./utils'); +const { spawn } = require('child_process'); + +const dummyResponse = require('./dummyResponse.json'); + const useDummy = false; + +const doScreenApiRequest = (socket, userid = null) => { + const query = userid ? `?userid=${userid}` : ''; + return fetch(`${api.url}/${api.version}/screen/${uuid}${query}`, { + headers: { + Autorization: `Bearer ${createSignedJWT()}`, + }, + }) + .then(rawRes => rawRes.json()) + .then((res) => { + socket.emit('panel_data', res); + return res.ttl; + }) + .catch(console.log); +}; + + +const setChrono = (socket) => { + if (useDummy) { + return interval(() => socket.emit('panel_data', dummyResponse), 0); + } + return interval(() => doScreenApiRequest(socket), 0); +}; + + io.of('/').on('connection', (socket) => { socket.emit('config', { fontSize, rowHeight }); - const chrono = useDummy - ? interval(() => { - socket.emit('panel_data', dummyResponse); - return 15000; - }, 0) - : interval( - () => - fetch(`${api.url}/${api.version}/screen/${uuid}`, { - headers: { - Autorization: `Bearer ${createSignedJWT()}`, - }, - }) - .then(rawRes => rawRes.json()) - .then((res) => { - socket.emit('panel_data', res); - return res.ttl; - }) - .catch(console.log), - 0, - ); + const chrono = setChrono(socket); + chrono.start(); // Respond to date message with the date socket.on('date', () => { @@ -43,4 +52,13 @@ io.of('/').on('connection', (socket) => { socket.on('disconnect', () => { chrono.stop(); }); + + const badgeChild = spawn('scripts/nfc-poll-wrapper-dummy.sh'); + + badgeChild.stdout.on('data', (data0) => { + const userid = data0.toString().trim(); + console.log(`child stdout: ${userid}`); + + doScreenApiRequest(socket, userid).then(ttl => chrono.restart(ttl)); + }); }); diff --git a/server/utils.js b/server/utils.js index ebc10574df921d9bdaa3a993e0311fcf4a32c9be..424c9f01836ee146928fdbacd6b223e0d2fe5918 100644 --- a/server/utils.js +++ b/server/utils.js @@ -56,12 +56,12 @@ const interval = (fn, initialTTL, output = {}) => { Object.assign(output, getOutput(getTimeout(0))); return output; }, + stop, restart: (ttl) => { stop(); Object.assign(output, getOutput(getTimeout(ttl || initialTTL))); return output; }, - stop, restartNow: () => { stop(); Object.assign(output, getOutput(getTimeout(0)));