main.lua
changeset 53 14ea0fe6ca86
parent 49 1cd2a8db392d
child 65 9c471840acb9
equal deleted inserted replaced
52:93e468eb2ffb 53:14ea0fe6ca86
    31 local t_insert = table.insert;
    31 local t_insert = table.insert;
    32 local t_concat = table.concat;
    32 local t_concat = table.concat;
    33 local t_concatall = function (t, sep) local tt = {}; for _, s in ipairs(t) do t_insert(tt, tostring(s)); end return t_concat(tt, sep); end
    33 local t_concatall = function (t, sep) local tt = {}; for _, s in ipairs(t) do t_insert(tt, tostring(s)); end return t_concat(tt, sep); end
    34 local m_random = math.random;
    34 local m_random = math.random;
    35 local format = string.format;
    35 local format = string.format;
       
    36 local sm_new_session, sm_destroy_session = sessionmanager.new_session, sessionmanager.destroy_session; --import("core.sessionmanager", "new_session", "destroy_session");
    36 local st = stanza;
    37 local st = stanza;
    37 ------------------------------
    38 ------------------------------
    38 
    39 
    39 
    40 
    40 
    41 
    46 
    47 
    47 function handler(conn, data, err)
    48 function handler(conn, data, err)
    48 	local session = sessions[conn];
    49 	local session = sessions[conn];
    49 
    50 
    50 	if not session then
    51 	if not session then
    51 		sessions[conn] = sessionmanager.new_session(conn);
    52 		sessions[conn] = sm_new_session(conn);
    52 		session = sessions[conn];
    53 		session = sessions[conn];
    53 
    54 
    54 		-- Logging functions --
    55 		-- Logging functions --
    55 
    56 
    56 		local mainlog, log = log;
    57 		local mainlog, log = log;
    73 				local pres = st.presence{ type = "unavailable" };
    74 				local pres = st.presence{ type = "unavailable" };
    74 				if err == "closed" then err = "connection closed"; end
    75 				if err == "closed" then err = "connection closed"; end
    75 				pres:tag("status"):text("Disconnected: "..err);
    76 				pres:tag("status"):text("Disconnected: "..err);
    76 				session.stanza_dispatch(pres);
    77 				session.stanza_dispatch(pres);
    77 			end
    78 			end
    78 			if session.username then
       
    79 				hosts[session.host].sessions[session.username] = nil;
       
    80 			end
       
    81 			session = nil;
    79 			session = nil;
    82 			print("Disconnected: "..err);
    80 			print("Disconnected: "..tostring(err));
    83 			collectgarbage("collect");
    81 			collectgarbage("collect");
    84 		end
    82 		end
    85 	end
    83 	end
    86 	if data then
    84 	if data then
    87 		session.connhandler:data(data);
    85 		session.connhandler:data(data);
    89 	
    87 	
    90 	--log("info", "core", "Client disconnected, connection closed");
    88 	--log("info", "core", "Client disconnected, connection closed");
    91 end
    89 end
    92 
    90 
    93 function disconnect(conn, err)
    91 function disconnect(conn, err)
    94 	sessions[conn].disconnect(err);
    92 	sm_destroy_session(sessions[conn]);
    95 	sessions[conn] = nil;
    93 	sessions[conn] = nil;
    96 end
    94 end
    97 
    95 
    98 modulemanager.loadall();
    96 modulemanager.loadall();
    99 
    97