17 local newproxy = newproxy; |
17 local newproxy = newproxy; |
18 local getmetatable = getmetatable; |
18 local getmetatable = getmetatable; |
19 |
19 |
20 module "sessionmanager" |
20 module "sessionmanager" |
21 |
21 |
|
22 local open_sessions = 0; |
|
23 |
22 function new_session(conn) |
24 function new_session(conn) |
23 local session = { conn = conn, priority = 0, type = "c2s_unauthed" }; |
25 local session = { conn = conn, priority = 0, type = "c2s_unauthed" }; |
24 if true then |
26 if true then |
25 session.trace = newproxy(true); |
27 session.trace = newproxy(true); |
26 getmetatable(session.trace).__gc = function () print("Session got collected") end; |
28 getmetatable(session.trace).__gc = function () open_sessions = open_sessions - 1; print("Session got collected, now "..open_sessions.." sessions are allocated") end; |
27 end |
29 end |
|
30 open_sessions = open_sessions + 1; |
28 local w = conn.write; |
31 local w = conn.write; |
29 session.send = function (t) w(tostring(t)); end |
32 session.send = function (t) w(tostring(t)); end |
30 return session; |
33 return session; |
31 end |
34 end |
32 |
35 |
33 function destroy_session(session) |
36 function destroy_session(session) |
34 if not (session and session.disconnect) then return; end |
37 session.log("info", "Destroying session"); |
35 log("debug", "Destroying session..."); |
|
36 session.disconnect(); |
|
37 if session.username then |
38 if session.username then |
38 if session.resource then |
39 if session.resource then |
39 hosts[session.host].sessions[session.username].sessions[session.resource] = nil; |
40 hosts[session.host].sessions[session.username].sessions[session.resource] = nil; |
40 end |
41 end |
41 local nomore = true; |
42 local nomore = true; |
51 for k in pairs(session) do |
52 for k in pairs(session) do |
52 if k ~= "trace" then |
53 if k ~= "trace" then |
53 session[k] = nil; |
54 session[k] = nil; |
54 end |
55 end |
55 end |
56 end |
56 collectgarbage("collect"); |
|
57 collectgarbage("collect"); |
|
58 collectgarbage("collect"); |
|
59 collectgarbage("collect"); |
|
60 collectgarbage("collect"); |
|
61 end |
57 end |
62 |
58 |
63 function send_to_session(session, data) |
59 function send_to_session(session, data) |
64 log("debug", "Sending: %s", tostring(data)); |
60 log("debug", "Sending: %s", tostring(data)); |
65 session.conn.write(tostring(data)); |
61 session.conn.write(tostring(data)); |