const express = require('express'); const app = express(); const DOUT_LUT = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']; const server = app.listen(3000, function () { console.log('Example app listening on port 3000!'); }) const io = require('socket.io').listen(server); var ioState = { dout: [false, false, false, false], din: [false, false, false, false] } const updateState = data => { ioState[data.type] = ioState[data.type].map((x, i) => i == data.pin ? data.value : x ); console.log(ioState); } app.use('/', express.static('dist')) app.get('/api/dio/:data', function (req, res) { const doutNum = ioState.dout.reduce((total, x, i) => x ? total + Math.pow(2, i) : total, 0); const doutChar = DOUT_LUT[doutNum]; res.send(doutChar); const dinChar = req.params.data || '0'; const dinArray = parseInt(dinChar, 16).toString(2).split('').reverse(); const din = new Array(4).fill(false).map((x, i) => dinArray[i] != '1').reverse(); if (ioState.din.toString() != din.toString()) { ioState.din = din; io.emit('ioState', ioState); console.log(din); } }) io.on('connection', socket => { socket.emit('ioState', ioState); socket.on('update', data => { console.log(data); updateState(data); io.sockets.emit('ioState', ioState); }); });