| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- --触发事件处理模块
- --需要保证订阅在前, 触发在后
- local TriggerDefine = require("trigger.TriggerDefine")
- --订阅列表
- local moniterTbl = {}
- --检测触发事件是否正确
- local function checkTrigger(arg)
- local errTag = nil
- if type(arg) == "table" then
- for _, tag in ipairs(arg) do
- if not TriggerDefine.TRIGGERADDTB[tag] and not TriggerDefine.TRIGGERUPDATETB[tag] then
- errTag = tag
- break
- end
- end
- else
- if not TriggerDefine.TRIGGERADDTB[arg] and not TriggerDefine.TRIGGERUPDATETB[arg] then
- errTag = arg
- end
- end
- if errTag then
- assert(false, string.format("注册事件不存在, tag = %s", errTag))
- end
- return true
- end
- --注册订阅
- function RegisterMoniter(triggerArr, cbFunc)
- checkTrigger(triggerArr)
- local handler = #moniterTbl+1
- moniterTbl[handler] = {
- triggerArr = triggerArr,
- cbFunc = cbFunc,
- }
- return handler
- end
- --移除订阅
- function RemoveMoniter(handler)
- if not handler then
- return
- end
- table.remove(moniterTbl, handler)
- end
- --广播
- function Broadcast(human, triggerTag, val, isAdd)
- for tag, v in ipairs(moniterTbl) do
- if table.find(v.triggerArr, triggerTag) then
- local f = v.cbFunc
- local res = pcall(f, human, triggerTag, val, isAdd)
- if not res then
- print(string.format("广播失败, handler = %s", tag))
- end
- end
- end
- end
- --触发事件
- function Trigger(human, triggerTag, val)
- local isAdd = false
- if TriggerDefine.TRIGGERADDTB[triggerTag] then
- isAdd = true
- end
- if not isAdd then
- if not TriggerDefine.TRIGGERUPDATETB[triggerTag] then
- assert(false, string.format("触发事件不存在, tag = %s", triggerTag))
- end
- end
- Broadcast(human, triggerTag, val, isAdd)
- end
|