58 lines
1.5 KiB
JavaScript
58 lines
1.5 KiB
JavaScript
const WebSocket = require('ws');
|
|
const net = require('net');
|
|
const fs = require('fs');
|
|
|
|
const client = new net.Socket();
|
|
const wss = new WebSocket.Server({ host: '127.0.0.1', port: 4321 });
|
|
|
|
wss.broadcast = function (data) {
|
|
wss.clients.forEach((client) => {
|
|
if (client.readyState === WebSocket.OPEN) {
|
|
client.send(data);
|
|
}
|
|
});
|
|
};
|
|
|
|
client.connect(14580, 'rotate.aprs2.net', () =>
|
|
client.write('user KC1GDW pass -1 filter r/43.90/-72.15/75\r\n')
|
|
);
|
|
|
|
function datestamp(date) {
|
|
return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;
|
|
}
|
|
|
|
client.on('data', function (data) {
|
|
let str = data.toString('utf8').replace(/^\s+|\s+$/g, '');
|
|
console.log(str);
|
|
|
|
// strip whitespace, then handle multiple APRS packets per TCP packet
|
|
str.split('\r\n').forEach((packet) => {
|
|
if (!packet.startsWith('#')) {
|
|
// ignore comments
|
|
let date = new Date();
|
|
// create log dir if it doesn't exist
|
|
if (!fs.existsSync('log')) fs.mkdirSync('log');
|
|
fs.appendFile(
|
|
`log/log${datestamp(date)}.json`,
|
|
JSON.stringify([date, packet]) + '\n',
|
|
(err) => {
|
|
if (err) throw err;
|
|
}
|
|
);
|
|
wss.broadcast(JSON.stringify([date, packet]));
|
|
}
|
|
});
|
|
});
|
|
|
|
wss.on('connection', (ws) => {
|
|
let date = new Date();
|
|
let filename = `log/log${datestamp(date)}.json`;
|
|
|
|
if (fs.existsSync(filename)) {
|
|
fs.readFileSync(filename)
|
|
.toString()
|
|
.split('\n')
|
|
.forEach((line) => ws.send(line));
|
|
}
|
|
});
|