Mercurial > prosody-hg
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 |
| parents | d10957394a3c |
| children | 471b676e64eb |
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"; |
