Add support for saving message history.

This commit is contained in:
bʰedoh₂ swé 2024-12-18 21:38:24 +05:00
parent 3ba53e5dce
commit a29b0ac898
4 changed files with 1367 additions and 33 deletions

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
*.js *.js
data.db
config.json config.json

View File

@ -9,27 +9,24 @@ if (process.argv[3] == null) {
const ip = process.argv[2]; const ip = process.argv[2];
const port = Number(process.argv[3]); const port = Number(process.argv[3]);
class Message { function msgToString(time: Date, address: string, msg: string) {
readonly msg: string; return "[" + time.getDate() + "." + (time.getMonth() + 1) + "." + time.getFullYear() +
readonly time: Date; " " + time.getHours() + ":" + time.getMinutes() +
readonly address: string; "] {" + address + "} "
constructor(msg: string, time: Date, address: string) { + msg;
this.msg = msg;
this.time = time;
this.address = address;
}
toString() {
let d = this.time
return "[" + d.getDate() + "." + (d.getMonth() + 1) + "." + d.getFullYear() +
" " + d.getHours() + ":" + d.getMinutes() +
"] {" + this.address + "} "
+ this.msg.replace("/\n/g", "$");
}
} }
let messages: Message[] = [];
//const net = require('net'); 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(); const textEncoder = new TextEncoder();
import * as net from "net"; import * as net from "net";
let srv = net.createServer(function(socket: net.Socket) { let srv = net.createServer(function(socket: net.Socket) {
@ -42,29 +39,26 @@ let srv = net.createServer(function(socket: net.Socket) {
socket.on('data', function(data: Buffer | string) { socket.on('data', function(data: Buffer | string) {
switch (data[0]) { switch (data[0]) {
case 0x30: case 0x30:
let msg = new Message(String(data.slice(1)), new Date, addr.address); const store = db.prepare("INSERT INTO messages VALUES (?,?,?)");
messages[messages.length] = msg; let t = new Date;
console.log("Got message: " + msg.toString()); 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() socket.end()
return; return;
case 0x31: case 0x31:
let msize = 1
for (const i of messages) {
msize += textEncoder.encode(i.toString()).length;
}
socket.write(String(msize)); socket.write(String(msize));
socket.end(); socket.end();
console.log(addr.address + ", got size request. " + msize);
return; return;
case 0x32: case 0x32:
console.log(addr.address + ", got messages request.");
let str = ""; let str = "";
for (const i of messages) { db.each("SELECT time, address, msg FROM messages", (err: Error, m: {time: number; address: string; msg: string}) => {
str += i.toString(); str += msgToString(new Date(m.time), m.address, m.msg);
} }, () => {
str += "\n" socket.write(str);
console.log("Sending " + str.length + " to " + addr.address); });
socket.write(str);
return; return;
} }
console.log(addr.address + "???" + data[0]); console.log(addr.address + "???" + data[0]);

1336
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -2,5 +2,8 @@
"devDependencies": { "devDependencies": {
"@types/node": "^22.10.2", "@types/node": "^22.10.2",
"typescript": "^5.7.2" "typescript": "^5.7.2"
},
"dependencies": {
"sqlite3": "^5.1.7"
} }
} }