index.js 1,8 ko
Newer Older
Quentin Vauthier's avatar
Quentin Vauthier a validé
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
}
Quentin Vauthier's avatar
Quentin Vauthier a validé

parser.on('data', function returnStatus(data) {
Quentin Vauthier's avatar
Quentin Vauthier a validé
    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()
    })
Quentin Vauthier's avatar
Quentin Vauthier a validé
})

Quentin Vauthier's avatar
Quentin Vauthier a validé
const allowedMessages = ['lock', 'unlock', 'catEntered', 'catLeft', 'status']
wss.on('connection', async function connection(ws) {
Quentin Vauthier's avatar
Quentin Vauthier a validé
    ws.send(JSON.stringify(status))
    ws.on('message', function incoming(buffer) {
        const message = buffer.toString('utf8').trim()
Quentin Vauthier's avatar
Quentin Vauthier a validé
        console.log(`received: ${message}`)
        if(allowedMessages.includes(message)) {
            port.write(`${message}\n`)
            port.flush()
        }
    });
Quentin Vauthier's avatar
Quentin Vauthier a validé
})

port.on('open', () => {
    port.write('status\n')
    port.flush()
})

function dateToMySQLDateTime(date = new Date()) {
    return date.toISOString().slice(0, 19).replace('T', ' ');
}