Diff

util/adminstream.lua @ 13589:b1b931d5fee8

util.adminstream: Expose session events (specifically "disconnected") Currently there is no way to get this info and perform cleanup tasks.
author Matthew Wild <mwild1@gmail.com>
date Tue, 07 Jan 2025 18:07:45 +0000
parent 12975:d10957394a3c
line wrap: on
line diff
--- a/util/adminstream.lua	Tue Jan 07 18:06:29 2025 +0000
+++ b/util/adminstream.lua	Tue Jan 07 18:07:45 2025 +0000
@@ -185,9 +185,12 @@
 end
 
 local function new_server(sessions, stanza_handler)
-	local listeners = {};
+	local s = {
+		events = events.new();
+		listeners = {};
+	};
 
-	function listeners.onconnect(conn)
+	function s.listeners.onconnect(conn)
 		log("debug", "New connection");
 		local session = sessionlib.new("admin");
 		sessionlib.set_id(session);
@@ -241,29 +244,28 @@
 		sessions[conn] = session;
 	end
 
-	function listeners.onincoming(conn, data)
+	function s.listeners.onincoming(conn, data)
 		local session = sessions[conn];
 		if session then
 			session.data(data);
 		end
 	end
 
-	function listeners.ondisconnect(conn, err)
+	function s.listeners.ondisconnect(conn, err)
 		local session = sessions[conn];
 		if session then
 			session.log("info", "Admin client disconnected: %s", err or "connection closed");
 			session.conn = nil;
 			sessions[conn]  = nil;
+			s.events.fire_event("disconnected", { session = session });
 		end
 	end
 
-	function listeners.onreadtimeout(conn)
+	function s.listeners.onreadtimeout(conn)
 		return conn:send(" ");
 	end
 
-	return {
-		listeners = listeners;
-	};
+	return s;
 end
 
 local function new_client()