Software /
code /
prosody
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()