Software /
code /
prosody
Comparison
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 |
comparison
equal
deleted
inserted
replaced
13588:899453f11f50 | 13589:b1b931d5fee8 |
---|---|
183 end; | 183 end; |
184 }; | 184 }; |
185 end | 185 end |
186 | 186 |
187 local function new_server(sessions, stanza_handler) | 187 local function new_server(sessions, stanza_handler) |
188 local listeners = {}; | 188 local s = { |
189 | 189 events = events.new(); |
190 function listeners.onconnect(conn) | 190 listeners = {}; |
191 }; | |
192 | |
193 function s.listeners.onconnect(conn) | |
191 log("debug", "New connection"); | 194 log("debug", "New connection"); |
192 local session = sessionlib.new("admin"); | 195 local session = sessionlib.new("admin"); |
193 sessionlib.set_id(session); | 196 sessionlib.set_id(session); |
194 sessionlib.set_logger(session); | 197 sessionlib.set_logger(session); |
195 sessionlib.set_conn(session, conn); | 198 sessionlib.set_conn(session, conn); |
239 end | 242 end |
240 | 243 |
241 sessions[conn] = session; | 244 sessions[conn] = session; |
242 end | 245 end |
243 | 246 |
244 function listeners.onincoming(conn, data) | 247 function s.listeners.onincoming(conn, data) |
245 local session = sessions[conn]; | 248 local session = sessions[conn]; |
246 if session then | 249 if session then |
247 session.data(data); | 250 session.data(data); |
248 end | 251 end |
249 end | 252 end |
250 | 253 |
251 function listeners.ondisconnect(conn, err) | 254 function s.listeners.ondisconnect(conn, err) |
252 local session = sessions[conn]; | 255 local session = sessions[conn]; |
253 if session then | 256 if session then |
254 session.log("info", "Admin client disconnected: %s", err or "connection closed"); | 257 session.log("info", "Admin client disconnected: %s", err or "connection closed"); |
255 session.conn = nil; | 258 session.conn = nil; |
256 sessions[conn] = nil; | 259 sessions[conn] = nil; |
257 end | 260 s.events.fire_event("disconnected", { session = session }); |
258 end | 261 end |
259 | 262 end |
260 function listeners.onreadtimeout(conn) | 263 |
264 function s.listeners.onreadtimeout(conn) | |
261 return conn:send(" "); | 265 return conn:send(" "); |
262 end | 266 end |
263 | 267 |
264 return { | 268 return s; |
265 listeners = listeners; | |
266 }; | |
267 end | 269 end |
268 | 270 |
269 local function new_client() | 271 local function new_client() |
270 local client = { | 272 local client = { |
271 type = "client"; | 273 type = "client"; |