Last active
May 24, 2021 12:45
-
-
Save losophy/fa1bdd0e9229507b81248f566d8016c2 to your computer and use it in GitHub Desktop.
事件驱动器
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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