event.lua 575 B

123456789101112131415161718192021222324252627
  1. Event = class()
  2. function Event:init()
  3. self.handlers = {}
  4. end
  5. function Event:on(event, fn, context)
  6. self.handlers[event] = self.handlers[event] or {}
  7. if context then
  8. self.handlers[event][context] = fn
  9. else
  10. table.insert(self.handlers[event], fn)
  11. end
  12. end
  13. function Event:emit(event, data)
  14. if not self.handlers[event] then return end
  15. for _, fn in pairs(self.handlers[event]) do
  16. fn(data)
  17. end
  18. end
  19. function Event:remove(event, context)
  20. if self.handlers[event] and self.handlers[event][context] then
  21. self.handlers[event][context] = nil
  22. end
  23. end