• Lua 事件触发机制(注册,触发)


    日常工作中经常会用到触发机制,这里就提供一个注册触发机制,在代码中在也不用专门去调用各个模块的接口;只需要触发即可,触发后会自动调用接口

    直接上代码

    1. local _EventHandle = {};
    2. _EventHandle.listenerHandleIndex = 0
    3. _EventHandle.listenersList = {}
    4. function _EventHandle:AddEventListener(eventName, listener)
    5. eventName = string.upper(eventName);
    6. if self.listenersList[eventName] == nil then
    7. self.listenersList[eventName] = {};
    8. end
    9. self.listenerHandleIndex = self.listenerHandleIndex + 1;
    10. self.listenersList[eventName][self.listenerHandleIndex] = listener;
    11. return self.listenerHandleIndex;
    12. end
    13. function _EventHandle:dispatchEvent(event)
    14. event.name = string.upper(event.name);
    15. local _eventName = event.name;
    16. if self.listenersList[_eventName] == nil then return; end
    17. for _index, _listener in pairs(self.listenersList[_eventName]) do
    18. local ok, _ret = Try(_listener, event)
    19. if not ok then
    20. G_logger:warn_format("[_EventHandle:dispatchEvent] Failed, event:%s, err:%s", _eventName, tostring(_ret))
    21. elseif _ret == "__REMOVE__" then
    22. self.listenersList[_eventName][_index] = nil;
    23. end
    24. end
    25. end
    26. function _EventHandle:removeEventListener(eventName, key)
    27. eventName = string.upper(eventName);
    28. if self.listenersList[eventName] == nil then return; end
    29. for _index, _listener in pairs(self.listenersList[eventName]) do
    30. if key == _index or key == _listener then
    31. self.listenersList[eventName][_index] = nil;
    32. break;
    33. end
    34. end
    35. end
    36. function _EventHandle:removeAllEventListenersForEvent(eventName)
    37. self.listenersList[string.upper(eventName)] = nil;
    38. end
    39. function _EventHandle:removeAllEventListeners()
    40. self.listenersList = {};
    41. end
    42. return _EventHandle;

    AddEventListener:注册接口

    dispatchEvent:触发接口

    其他的接口都是移除接口

    调用

    注册:Event:AddEventListener("Event:try_unlock_idcard", __on_event_try_unlock_idcard),__on_event_try_unlock_idcard是回调函数

    触发:Event:dispatchEvent({name = "Event:try_unlock_idcard", player = avatar_part.owner, data_type = HotPot_Type.flash_avatar_part_count, value = avatar_part.flash_count})

  • 相关阅读:
    Day22:多态详解
    第二章网页前端基础与HTTP协议
    【pyenv】python版本管理工具
    拦截导弹问题(贪心算法)
    【PyTorch】深度学习实践之 CNN基础篇——卷积神经网络跑Minst数据集
    YOLOv7中的数据集处理【代码分析】
    SpringBoot整合Easy-ES操作演示文档
    申请CNAS软件测试资质,如何选择测试工具最具性价比?
    存储器笔记
    由于找不到d3dx9_43.dll无法继续执行此代码怎么解决?全面解析d3dx9_43.dll
  • 原文地址:https://blog.csdn.net/choudan8888/article/details/134036962