mod_storage_memory/mod_storage_memory.lua
changeset 2624 8b8cab2eb7fc
parent 2623 1e4bbff0a6fd
child 2658 9e5015555fff
equal deleted inserted replaced
2623:1e4bbff0a6fd 2624:8b8cab2eb7fc
       
     1 local auto_purge_enabled = module:get_option_boolean("storage_memory_temporary", false);
       
     2 local auto_purge_stores = module:get_option_set("storage_memory_temporary_stores", {});
     1 
     3 
     2 local memory = setmetatable({}, {
     4 local memory = setmetatable({}, {
     3 	__index = function(t, k)
     5 	__index = function(t, k)
     4 		local store = module:shared(k)
     6 		local store = module:shared(k)
     5 		t[k] = store;
     7 		t[k] = store;
   169 		return setmetatable({ store = memory[store] }, store_mt);
   171 		return setmetatable({ store = memory[store] }, store_mt);
   170 	end
   172 	end
   171 	return nil, "unsupported-store";
   173 	return nil, "unsupported-store";
   172 end
   174 end
   173 
   175 
       
   176 if auto_purge_enabled then
       
   177 	module:hook("resource-unbind", function (event)
       
   178 		local user_bare_jid = event.session.username.."@"..event.session.host;
       
   179 		if not prosody.bare_sessions[user_bare_jid] then -- User went offline
       
   180 			module:log("debug", "Clearing store for offline user %s", user_bare_jid);
       
   181 			local f, s, v;
       
   182 			if auto_purge_stores:empty() then
       
   183 				f, s, v = pairs(memory);
       
   184 			else
       
   185 				f, s, v = auto_purge_stores:items();
       
   186 			end
       
   187 
       
   188 			for store_name in f, s, v do
       
   189 				if memory[store_name] then
       
   190 					memory[store_name][event.session.username] = nil;
       
   191 				end
       
   192 			end
       
   193 		end
       
   194 	end);
       
   195 end
       
   196 
   174 module:provides("storage", driver);
   197 module:provides("storage", driver);