# HG changeset patch # User Matthew Wild # Date 1736273265 0 # Node ID b1b931d5fee8a375a8dc5f4d758a09521cb70885 # Parent 899453f11f50cf4fdcfadbd6388ccb0eddb94cbd util.adminstream: Expose session events (specifically "disconnected") Currently there is no way to get this info and perform cleanup tasks. diff -r 899453f11f50 -r b1b931d5fee8 util/adminstream.lua --- 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()