Add support for saving message history.
This commit is contained in:
parent
3ba53e5dce
commit
a29b0ac898
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,4 +1,5 @@
|
|||||||
*.js
|
*.js
|
||||||
|
data.db
|
||||||
|
|
||||||
config.json
|
config.json
|
||||||
|
|
||||||
|
60
index.ts
60
index.ts
@ -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
1336
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user