You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1000 B
Lua

local channel = require "channel"
local EventEmitter = {}
function EventEmitter:new()
local obj = {
events = {}, -- 监听的所有事件
channels = {}, -- event: channel
}
setmetatable(obj, self)
self.__index = self
return obj
end
function EventEmitter:registerEvent(name, desc)
self.events[name] = desc
end
function EventEmitter:registerCallback(event, callback)
assert(event)
assert(callback)
if not self.events[event] then
error("not register event: "..event)
end
local ch = self.channels[event]
if not ch then
ch = channel:new(event)
self.channels[event] = ch
end
ch:on(callback)
end
function EventEmitter:emit(event, ...)
if not self.events[event] then
error("not register event: "..event)
end
local ch = self.channels[event]
if not ch then return end
for _, listener in ipairs(ch.listeners) do
listener.callback(...)
end
end
return EventEmitter