Skip to content

Instantly share code, notes, and snippets.

@losophy
Last active May 24, 2021 12:45
Show Gist options
  • Save losophy/fa1bdd0e9229507b81248f566d8016c2 to your computer and use it in GitHub Desktop.
Save losophy/fa1bdd0e9229507b81248f566d8016c2 to your computer and use it in GitHub Desktop.
事件驱动器
local GEventMgr = {}
local ClassModule = require "Class"
local Traceback = Traceback
local globalEventRegCache = {}--eventName<eventName<obj,true>>
function GEventMgr.RegEvent( eventName, obj )
if not obj[eventName] then
logwarning("GEventMgr.RegEvent","eventName:",eventName,"is not in obj:",ClassModule.GetClassName(obj))
end
local eventRegs = globalEventRegCache[eventName]
if not eventRegs then
eventRegs = setmetatable({},{__mode="k"})
globalEventRegCache[eventName] = eventRegs
end
eventRegs[obj] = true
end
function GEventMgr.UnregEvent( eventName, obj )
if not obj[eventName] then
logwarning("GEventMgr.RegEvent","eventName:",eventName,"is not in obj:",ClassModule.GetClassName(obj))
end
local eventRegs = globalEventRegCache[eventName]
if not eventRegs then
eventRegs[obj] = nil
end
end
---全局事件注册分发器
function GEventMgr.DispatchEvent( eventName,... )
local eventRegs = globalEventRegCache[eventName]
if not eventRegs then
return
end
for obj in pairs(eventRegs) do
if not obj.__closeObj then
xpcall(obj[eventName],Traceback,obj,...)
end
end
end
return GEventMgr
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment