60 lines
2.1 KiB
Lua
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
|