• 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})

  • 相关阅读:
    别做重复低质的工作内容摸鱼了,18k强者分享自动化测试秘籍
    元数据概述
    STL 集合(爱思创)
    node封装mysql
    MyBatis使用mapper代理方式完成入门案例(对数据库进行查询)
    C++20 以 Bazel & Clang 开始
    爬虫-(4)
    网络安全70部学员第二阶段项目验收顺利结束
    心累了,看一点职场思维
    [Oracle]复习笔记-SQL部分内容
  • 原文地址:https://blog.csdn.net/choudan8888/article/details/134036962