diff options
Diffstat (limited to 'bin/EventMsgCenter')
-rw-r--r-- | bin/EventMsgCenter/EventMsgCenter.lua | 55 | ||||
-rw-r--r-- | bin/EventMsgCenter/Events.lua | 21 | ||||
-rw-r--r-- | bin/EventMsgCenter/README.md | 2 |
3 files changed, 78 insertions, 0 deletions
diff --git a/bin/EventMsgCenter/EventMsgCenter.lua b/bin/EventMsgCenter/EventMsgCenter.lua new file mode 100644 index 0000000..7b944c2 --- /dev/null +++ b/bin/EventMsgCenter/EventMsgCenter.lua @@ -0,0 +1,55 @@ +local EventMsgCenter = {} + +-- <event, {callbacks}> +local _broadcast = {} + +EventMsgCenter.registerMsg = function(e, callback, first) + if _broadcast[e] == nil then + _broadcast[e] = {} + end + first = first or false + EventMsgCenter.unregisterMsg(e, callback) + if not first then + table.insert(_broadcast[e], callback) + else + table.insert(_broadcast[e], 1, callback) + end +end + +local removeElement = function(t, e) + for i, v in ipairs(t) do + if v == e then + table.remove(t, i) + break + end + end +end + +EventMsgCenter.unregisterMsg = function(e, callback) + if _broadcast[e] == nil or callback == nil then + return + end + removeElement(_broadcast[e], callback) +end + +EventMsgCenter.unregisterAllMsgByEvent = function(e) + _broadcast[e] = nil +end + +EventMsgCenter.unregisterAllMsg = function() + _broadcast = {} +end + +EventMsgCenter.sendMsg = function(e, ...) + local callbacks = _broadcast[e] + if callbacks == nil then + return + end + for _, f in ipairs(callbacks) do + if f ~= nil then + f(...) + end + end +end + +return EventMsgCenter
\ No newline at end of file diff --git a/bin/EventMsgCenter/Events.lua b/bin/EventMsgCenter/Events.lua new file mode 100644 index 0000000..3803fd4 --- /dev/null +++ b/bin/EventMsgCenter/Events.lua @@ -0,0 +1,21 @@ +local events = { + + "Player_Move", + "Player_Change", + "Player_Spawn", + "Player_Kick", + + "" + +} + +function CreatEnumTable(tbl, index) + local enumtbl = {} + local enumindex = index or 0 + for i, v in ipairs(tbl) do + enumtbl[v] = enumindex + i + end + return enumtbl +end + +return CreatEnumTable(events)
\ No newline at end of file diff --git a/bin/EventMsgCenter/README.md b/bin/EventMsgCenter/README.md new file mode 100644 index 0000000..ef3bd92 --- /dev/null +++ b/bin/EventMsgCenter/README.md @@ -0,0 +1,2 @@ +Event Massage Center + |