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";