fireEvent 产生事件,创建协程分发(在registerEventListener注册过的事件中通过事件名字找到对应的信息,然后执行对应模块的OnEvent函数),多个地方都注册了同一个事件的话,则所有监视该事件的模块都会收到

1 -- 事件ID
2 -- 可配置与配置表中(TODO)
3 activity_manager.activityEventId = {}
4 activity_manager.activityEventId.EVENT_TEST = 1;
5
6 -- 事件表
7 local event_tb = {}

活动状态改变事件监听相关函数

 1 function activity_manager:registerEventListener(layerName, eventId, func)
2 if type(eventId) ~= "number" then
3 print('ROORR:: activityEventId 参数非法')
4 return
5 end
6
7 if event_tb[eventId] ~= nil then
8 local _samelayer = false
9 for k, v in pairs(event_tb[eventId].monitor) do
10 if v.layerName == layerName then
11 print('WARNING:: eventId和layerName都一样前面的注册信息会被覆盖', eventId, layer)
12 _samelayer = true
13 v.func = func
14 end
15 end
16 if not _samelayer then
17 local _monitor = {}
18 _monitor.layerName = layerName
19 _monitor.func = func
20 table.insert(event_tb[eventId].monitor, _monitor)
21 end
22 else
23 event_tb[eventId] = {}
24 event_tb[eventId].monitor = {}
25 local _monitor = {}
26 _monitor.layerName = layerName
27 _monitor.func = func
28 table.insert(event_tb[eventId].monitor, _monitor)
29 end
30 end

注册活动事件监听者

1 function activity_manager:releaseEventListener(layerName, eventId)
2 for v in pairs(event_tb[eventId].monitor) do
3 if v.layerName == layerName then
4 v = nil
5 end
6 end
7 end

注销活动事件监听者

 1 function activity_manager:dispatchEvent(eventId, args)
2 if type(eventId) ~= "number" then
3 print('ROORR:: activityEventId 参数非法')
4 return
5 end
6
7 if event_tb[eventId] == nil then
8 print('ROORR:: activityEventId 参数不存在')
9 return
10 end
11
12 for k, v in pairs(event_tb[eventId].monitor) do
13 local func = v.func
14 local layerName = v.layerName
15 func(args)
16 end
17 end

事件分发,暂时不支持事件执行中断

1 function activity_manager:fireEvent(eventId, args)
2 if not event_tb or not next(event_tb) then return end
3 local co = coroutine.create( function(eventId, args)
4 self:dispatchEvent(eventId, args)
5 end)
6
7 local status, msg = coroutine.resume(co, eventId, args)
8 assert(status, msg)
9 end

主动产生事件,创建协程分发

1 function activity_manager:releaseEventListenerByName(layerName)
2 for k, v in pairs(event_tb) do
3 for index, _monitor in pairs(v.monitor) do
4 if _monitor.layerName == layerName then
5 v.monitor[index] = nil
6 end
7 end
8 end
9 end

注销某层所有活动事件监听者

最新文章

  1. LPTHW 笨办法学python 40章 类
  2. springmvc项目中java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
  3. 安装完mysql后用root不能su成mysql
  4. [原创]一个纯css实现兼容各种主流移动pc浏览器的时间轴
  5. Gen_server行为分析与实践
  6. kontalk
  7. HDOJ(HDU) 2401 Baskets of Gold Coins(数列、)
  8. ajax上传文件进度条
  9. nyist 220 推桌子
  10. vmware 新机克隆
  11. C# 读取系统日志
  12. zookeeper工作机制
  13. 网页布局设计css中单位px和em,rem的区别
  14. 爬虫系列3:scrapy技术进阶(xpath、rules、shell等)
  15. Javascript 地图库收集
  16. IDEA中Gradle插件的使用
  17. svn导出文件夹到另外目录export
  18. uart boot log
  19. Bioconductor应用领域之基因芯片
  20. ZJOI2018酱油记

热门文章

  1. 电脑安装不同版本的QT
  2. HIVE-CREATE TABLE
  3. 【运行报错】Openstack 在部署 Keystone 时出现依赖包报错 (解决安装时依赖包报错问题)
  4. spring mvc @Configuration addConverterFactory 无效问题
  5. TS补充笔记
  6. excel、word、PPT中插入PDF文件不显示图标问题
  7. 【快问快答】为什么NPOI读取表格数据的时候,遇到空格单元值会直接忽略
  8. uniapp开发的app打开微信小程序
  9. EMQX 在 Kubernetes 中如何进行优雅升级
  10. a[i]之和小于N的含义