Files
Main/Assets/GameAssets/Resources/Lua/Common/CustomLib/LuaDelegateManager/LuaDelegateManager.lua
2025-01-25 04:38:09 +08:00

60 lines
2.1 KiB
Lua

------------------------------------------------
--作者: 何健
--日期: 2019-05-29
--文件: LuaDelegateManager.lua
--模块: LuaDelegateManager
--描述: Lua端委托管理器
------------------------------------------------
local L_DelegateHander = require("Common.CustomLib.LuaDelegateManager.LuaDelegateHander")
local LuaDelegateManager = {
-- 委托列表
DelegateList = List:New(),
}
function LuaDelegateManager.Add(delegateClass, delegateName, func, caller)
local _hander = LuaDelegateManager.FindOrCreate(func, caller)
if delegateClass[delegateName] == nil then
delegateClass[delegateName] = _hander.Handler
else
delegateClass[delegateName] = delegateClass[delegateName] + _hander.Handler
end
return _hander.Handler
end
function LuaDelegateManager.Remove(delegateClass, delegateName, func, caller)
local _hander, _index = LuaDelegateManager.Find(func, caller)
if _hander ~= nil then
_hander:DecRef()
if delegateClass[delegateName] ~= nil then
delegateClass[delegateName] = delegateClass[delegateName] - _hander.Handler
end
if _hander.Ref == 0 then
LuaDelegateManager.DelegateList:RemoveAt(_index)
end
return _hander.Handler
end
end
function LuaDelegateManager.FindOrCreate(func, caller)
local _hander = nil
for i = 1, #LuaDelegateManager.DelegateList do
if LuaDelegateManager.DelegateList[i].Func == func and LuaDelegateManager.DelegateList[i].Caller == caller then
_hander = LuaDelegateManager.DelegateList[i]
_hander:IncRef()
end
end
if _hander == nil then
_hander = L_DelegateHander:New(func, caller)
LuaDelegateManager.DelegateList:Add(_hander)
end
return _hander
end
function LuaDelegateManager.Find(func, caller)
for i = 1, #LuaDelegateManager.DelegateList do
if LuaDelegateManager.DelegateList[i].Func == func and LuaDelegateManager.DelegateList[i].Caller == caller then
return LuaDelegateManager.DelegateList[i], i
end
end
end
return LuaDelegateManager