73 lines
2.1 KiB
TypeScript
73 lines
2.1 KiB
TypeScript
if (process.argv[2] == null) {
|
|
console.log("No IP specified");
|
|
process.exit(1)
|
|
}
|
|
if (process.argv[3] == null) {
|
|
console.log("No port specified");
|
|
process.exit(1)
|
|
}
|
|
const ip = process.argv[2];
|
|
const port = Number(process.argv[3]);
|
|
|
|
function msgToString(time: Date, address: string, msg: string) {
|
|
return "[" + time.getDate() + "." + (time.getMonth() + 1) + "." + time.getFullYear() +
|
|
" " + time.getHours() + ":" + time.getMinutes() +
|
|
"] {" + address + "} "
|
|
+ msg;
|
|
}
|
|
|
|
|
|
import * as sq from "sqlite3";
|
|
const db = new sq.Database("data.db");
|
|
db.run("CREATE TABLE IF NOT EXISTS messages (time INTEGER PRIMARY KEY, address TEXT NOT NULL, msg TEXT NOT NULL) STRICT");
|
|
|
|
|
|
let msize = 0;
|
|
db.each("SELECT time, address, msg FROM messages", (err: Error, m: {time: number; address: string; msg: string}) => {
|
|
msize += textEncoder.encode(msgToString(new Date(m.time), m.address, m.msg)).length
|
|
});
|
|
|
|
const textEncoder = new TextEncoder();
|
|
import * as net from "net";
|
|
let srv = net.createServer(function(socket: net.Socket) {
|
|
let addr = socket.address() as net.AddressInfo;
|
|
if (!addr.hasOwnProperty('address')) {
|
|
console.log("?!?!?!");
|
|
socket.end();
|
|
return;
|
|
}
|
|
socket.on('data', function(data: Buffer | string) {
|
|
switch (data[0]) {
|
|
case 0x30:
|
|
const store = db.prepare("INSERT INTO messages VALUES (?,?,?)");
|
|
let t = new Date;
|
|
let a = addr.address;
|
|
let m = String(data.slice(1)).replace("/\n/g", "\\n").replace("/\x1b/g", "\\x1b");
|
|
msize += textEncoder.encode(msgToString(t, a, m)).length
|
|
store.run(Number(t),a,m);
|
|
store.finalize();
|
|
socket.end()
|
|
return;
|
|
case 0x31:
|
|
socket.write(String(msize));
|
|
socket.end();
|
|
return;
|
|
case 0x32:
|
|
let str = "";
|
|
db.each("SELECT time, address, msg FROM messages", (err: Error, m: {time: number; address: string; msg: string}) => {
|
|
str += msgToString(new Date(m.time), m.address, m.msg);
|
|
}, () => {
|
|
socket.write(str);
|
|
});
|
|
return;
|
|
}
|
|
console.log(addr.address + "???" + data[0]);
|
|
});
|
|
socket.on('error', function(e: Error) {
|
|
console.log(e.stack);
|
|
});
|
|
})
|
|
|
|
console.log("Starting.");
|
|
srv.listen(port, ip);
|