Select Git revision
coord_to_intersections.py
socket.js 1.88 KiB
const fetch = require('node-fetch');
const path = require('path');
const {
uuid, fontSize, rowHeight, api,
} = require('./config');
const { spawn } = require('child_process');
const dummyResponse = require('./dummyResponse.json');
const { createSignedJWT, interval } = require('./utils');
const useDummy = false;
let version;
const checkVersion = (newVersion) => {
if (version && version !== newVersion) {
console.log('Update code');
const updateServer = spawn(path.resolve(__dirname, '../scripts/update_server.sh'));
updateServer.stdout.on('data', (data) => {
process.stdout.write(data);
});
}
version = newVersion;
};
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(async (res) => {
checkVersion(res.version);
socket.emit('panel_data', res);
return res.ttl;
})
.catch(console.log);
};
const setChrono = (socket) => {
if (useDummy) {
return interval(() => socket.emit('panel_data', dummyResponse), 10000);
}
return interval(() => doScreenApiRequest(socket), 10000);
};
module.exports = (socket) => {
socket.emit('config', { fontSize, rowHeight });
const chrono = setChrono(socket);
chrono.startNow();
// Respond to date message with the date
socket.on('date', () => {
socket.emit('date', { date: Date.now() });
});
socket.on('disconnect', () => {
chrono.stop();
});
const badgeChild = spawn(path.resolve(__dirname, '../scripts/nfc-poll-wrapper.sh'));
badgeChild.stdout.on('data', (data0) => {
const userid = data0.toString().trim();
console.log(`child stdout: ${userid}`);
doScreenApiRequest(socket, userid).then(ttl => chrono.restart(ttl));
});
};