import {port, parser} from './port.js' import wss from './websocket.js' import connection from './db.js' import { parse } from 'path' let status = {} async function updateStatus(newStatus) { if(newStatus.locked === status.locked && newStatus.catsInside === status.catsInside) return if(newStatus.locked !== status.locked) await connection.query(`INSERT INTO lock_log (date, action) VALUES ('${dateToMySQLDateTime()}', '${newStatus.locked ? 'locked' : 'unlocked'}')`) if(newStatus.catsInside < status.catsInside) await connection.query(`INSERT INTO cat_log (date, action, cats_inside) VALUES ('${dateToMySQLDateTime()}', 'left', ${newStatus.catsInside})`) else await connection.query(`INSERT INTO cat_log (date, action, cats_inside) VALUES ('${dateToMySQLDateTime()}', 'entered', ${newStatus.catsInside})`) status = newStatus } parser.on('data', function returnStatus(data) { updateStatus(JSON.parse(data.toString())) wss.clients.forEach(client => { if(client.currentStatus === data.toString()) return console.log(`sending status to ${client.id}`) client.send(data.toString()) client.currentStatus = data.toString() }) }) const allowedMessages = ['lock', 'unlock', 'catEntered', 'catLeft', 'status'] wss.on('connection', async function connection(ws) { ws.send(JSON.stringify(status)) ws.on('message', function incoming(buffer) { const message = buffer.toString('utf8').trim() console.log(`received: ${message}`) if(allowedMessages.includes(message)) { port.write(`${message}\n`) port.flush() } }); }) port.on('open', () => { port.write('status\n') port.flush() }) function dateToMySQLDateTime(date = new Date()) { return date.toISOString().slice(0, 19).replace('T', ' '); }