1.EventManager 全局的管理类
2.EventType 事件类型
3..Lua层Common工具目录去require对应文件目录的脚本文件
Lua
--事件类型
local EventType = {
TestMsg = 1,
}
return EventType
Lua
local EventManager = class();
EventManager.msgMap = {}
local function HaveSameFunc(tagTable, func)
for i=0, #tagTable do
if tagTable[i] == func then
return true
end
end
return false
end
local function GetFuncIndex(table, func)
if table == nil then
return
end
for i=1, #table do
if func == table[i] then
return i
end
end
return
end
--注册
function EventManager.RegisterMsg(msgid, func)
if EventManager.msgMap[msgid] ~= nil then
local callfunctable = EventManager.msgMap[msgid]
if callfunctable == nil then
callfunctable = {}
table.insert(callfunctable, func)
return
end
local findfunc = HaveSameFunc(callfunctable, func)
if not findfunc then
table.insert(callfunctable, func)
return
end
return
end
EventManager.msgMap[msgid] = {}
table.insert(EventManager.msgMap[msgid], func)
end
--反注册
function EventManager.UnRegisterMsg(msgid, func)
if EventManager.msgMap[msgid] ~= nil then
local callfunctable = EventManager.msgMap[msgid]
if callfunctable == nil then
return
end
local findfunc = HaveSameFunc(callfunctable, func)
if findfunc then
local delIndex = GetFuncIndex(callfunctable, func)
if delIndex then
table.remove(callfunctable, delIndex)
end
end
end
end
--抛事件
function EventManager.DispatchMsg(msgid,...)
if EventManager.msgMap[msgid]~= nil then
local callfunctable = EventManager.msgMap[msgid]
if callfunctable == nil then
return
end
for i=1, #callfunctable do
callfunctable[i](...)
end
end
end
return EventManager
业务层的使用
Lua
local AccountPanelUI = BaseClass("AccountPanelUI",UIBaseView)
local base = UIBaseView
function AccountPanelUI.OnCreate(self)
base.OnCreate(self)
self:RegMsg()
end
functiion AccountPanelUI:RegMsg()
self.funTable = {}
self.funTable.OnClick= function ()
print("test event.............")
end
EventManager.RegisterMsg(EventType.TestMsg, self.funTable.OnClick)
end
function AccountPanelUI:UnRegMsg()
EventManager.UnRegisterMsg(EventType.TestMsg, self.funTable.OnClick)
self.funTable = nil
end
return AccountPanelUI