re-transmit client's EVENT data once (re)connected to relays

Signed-off-by: Yonle <yonle@lecturify.net>
This commit is contained in:
Yonle
2023-11-12 17:52:02 +07:00
parent 30fcabe658
commit 8ad8e07536
2 changed files with 18 additions and 0 deletions

View File

@@ -14,6 +14,7 @@ sess.unsafeMode(true);
// Temporary database.
sess.exec("CREATE TABLE IF NOT EXISTS sess (cID TEXT, subID TEXT, filter TEXT);");
sess.exec("CREATE TABLE IF NOT EXISTS events (cID TEXT, subID TEXT, eID TEXT);"); // To prevent transmitting duplicates
sess.exec("CREATE TABLE IF NOT EXISTS recentEvents (cID TEXT, data TEXT);");
// CL - User socket
module.exports = (ws, req) => {
@@ -32,6 +33,7 @@ module.exports = (ws, req) => {
switch (data[0]) {
case "EVENT":
if (!data[1]?.id) return ws.send(JSON.stringify(["NOTICE", "error: no event id."]));
sess.prepare("INSERT INTO recentEvents VALUES (?, ?);").run(ws.id, JSON.stringify(data));
bc(data);
ws.send(JSON.stringify(["OK", data[1]?.id, true, ""]));
break;
@@ -74,6 +76,7 @@ module.exports = (ws, req) => {
sess.prepare("DELETE FROM sess WHERE cID = ?;").run(ws.id);
sess.prepare("DELETE FROM events WHERE cID = ?;").run(ws.id);
sess.prepare("DELETE FROM recentEvents WHERE cID = ?;").run(ws.id);
});
csess.set(ws.id, ws);
@@ -99,6 +102,12 @@ function newConn(addr) {
relay.on('open', _ => {
socks.add(relay); // Add this socket session to [socks]
if (process.env.LOG_ABOUT_RELAYS || log_about_relays) console.log(process.pid, "---", `[${socks.size}/${relays.length}]`, relay.addr, "is connected");
for (i of sess.prepare("SELECT data FROM recentEvents;").iterate()) {
if (relay.readyState >= 2) break;
relay.send(i.data);
}
for (i of sess.prepare("SELECT subID, filter FROM sess").iterate()) {
if (relay.readyState >= 2) break;
relay.send(JSON.stringify(["REQ", i.subID, JSON.parse(i.filter)]));

View File

@@ -14,6 +14,7 @@ sess.unsafeMode(true);
// Temporary database.
sess.exec("CREATE TABLE IF NOT EXISTS sess (cID TEXT, subID TEXT, filter TEXT);");
sess.exec("CREATE TABLE IF NOT EXISTS events (cID TEXT, subID TEXT, eID TEXT);"); // To prevent transmitting duplicates
sess.exec("CREATE TABLE IF NOT EXISTS recentEvents (cID TEXT, data TEXT);");
// CL - User socket
module.exports = (ws, req) => {
@@ -32,6 +33,7 @@ module.exports = (ws, req) => {
switch (data[0]) {
case "EVENT":
if (!data[1]?.id) return ws.send(JSON.stringify(["NOTICE", "error: no event id."]));
sess.prepare("INSERT INTO recentEvents VALUES (?, ?);").run(ws.id, JSON.stringify(data));
bc(data, ws.id);
ws.send(JSON.stringify(["OK", data[1]?.id, true, ""]));
break;
@@ -67,6 +69,7 @@ module.exports = (ws, req) => {
sess.prepare("DELETE FROM sess WHERE cID = ?;").run(ws.id);
sess.prepare("DELETE FROM events WHERE cID = ?;").run(ws.id);
sess.prepare("DELETE FROM recentEvents WHERE cID = ?;").run(ws.id);
terminate_sess(ws.id);
});
@@ -116,6 +119,12 @@ function newConn(addr, id) {
relay.on('open', _ => {
socks.add(relay); // Add this socket session to [socks]
if (process.env.LOG_ABOUT_RELAYS || log_about_relays) console.log(process.pid, "---", `[${id}] [${socks.size}/${relays.length*csess.size}]`, relay.addr, "is connected");
for (i of sess.prepare("SELECT data FROM recentEvents WHERE cID = ?;").iterate(id)) {
if (relay.readyState >= 2) break;
relay.send(i.data);
}
for (i of sess.prepare("SELECT subID, filter FROM sess WHERE cID = ?;").iterate(id)) {
if (relay.readyState >= 2) break;
relay.send(JSON.stringify(["REQ", i.subID, JSON.parse(i.filter)]));