From 0b8c3a1cc59d6a98b322a4745fe79533a9683213 Mon Sep 17 00:00:00 2001 From: DavidVentura Date: Wed, 31 Jan 2024 12:11:44 +0100 Subject: [PATCH] handle connect/disconnect events --- server.ts | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/server.ts b/server.ts index e0a9589..d5f4d22 100644 --- a/server.ts +++ b/server.ts @@ -13,6 +13,8 @@ export type Session = { eventEmitter: EventEmitter; dst_ip: string; lastReceivedPacket: number; + connected: boolean; + timers: ReturnType[]; }; export type PacketHandler = (session: Session, dv: DataView, rinfo: RemoteInfo) => void; @@ -63,6 +65,7 @@ export const makeSession = (handlers: Record { session.broadcast(buf); }, 2000); + session.timers.push(int); session.broadcast(buf); }); @@ -77,6 +80,8 @@ export const makeSession = (handlers: Record { const raw = msg.readU16(); const cmd = CommandsByValue[raw]; @@ -97,19 +102,31 @@ export const makeSession = (handlers: Record { + console.log(`Disconnected from ${name} - ${rinfo.address}`); + session.dst_ip = "0.0.0.0"; + session.connected = false; + session.timers.forEach((x) => clearInterval(x)); + session.timers = []; + }); + session.eventEmitter.on("connect", (name: string, rinfo: RemoteInfo) => { console.log(`Connected to ${name} - ${rinfo.address}`); session.outgoingCommandId = 0; session.dst_ip = rinfo.address; + session.connected = true; - if (session.ticket.every((x) => x == 0)) { - const int = setInterval(() => { - if (Date.now() - session.lastReceivedPacket > 600) { - let buf = create_P2pAlive(); - session.send(buf); - } - }, 400); - } + const int = setInterval(() => { + const delta = Date.now() - session.lastReceivedPacket; + if (delta > 600) { + let buf = create_P2pAlive(); + session.send(buf); + } + if (delta > 8000) { + session.eventEmitter.emit("disconnect", name, rinfo); + } + }, 400); + session.timers.push(int); }); return session; };