event.lua 595 B

1234567891011121314151617181920212223242526272829
  1. local 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
  24. return Event