项目记录22-- tolua基于lua框架事件派发
(题外话)
2016-2-23 xinghua
]]
local EventDispatcher = class("EventDispatcher")
local _Events = nil
function EventDispatcher:ctor( )
_Events = {}
end
--[[
表结构
{
type = {
Listener1,
Listener2
}
}
]]
--注冊监听事件
function EventDispatcher:AddEventListener(stype,Listener)
if type(stype) ~= "string" or type(Listener) ~= "function" then
error("AddEventListener error : type error ",2)
return
end
--获取_Events里面事件
local eventlist = _Events[stype]
if eventlist == nil then
eventlist = {}
table.insert(eventlist,Listener) --想队列里面插入一个事件
_Events[stype] = eventlist --放到大表里面
else
local func = eventlist[Listener]
if func == nil then
table.insert(eventlist,Listener)
else
error("AddEventListener error : listeren hai in")
end
end
end
--[[
触发
]]
function EventDispatcher:Dispatcher(stype,...)
if type(stype) ~= "string" then
error("Dispatcher error : stype error",1)
return
end
local listeners = _Events[stype]
if listeners == nil or #listeners <= 0 then
return
end
for i,v in ipairs(listeners) do
v(...)
end
end
--[[
移除指定类型的全部关联事件侦听,假设參数为nil则删除当前注冊器中全部的函数侦听
listener ~= nil 删除这个类型里面这个监听
]]
function EventDispatcher:RemoveEventListeners(stype,listener)
--空删除全部清空表
if stype == nil then
--获取keys
local keys = table.keys(_Events)
for i,v in ipairs(keys) do
_Events[v] = nil --设置为空
end
return
end
if type(stype) ~= "string" then
error("RemoveEventListeners error : stype no string",2)
return
end
local typeListeners = _Events[stype] --取出里面全部的这个类型的func
--依据类型删除
if listener ~= nil and type(listener) == "function" then
if typeListeners ~= nil and table.nums(typeListeners) > 0 then
if typeListeners[listener] ~= nil then
typeListeners[listener] = nil
end
end
return
end
--删除一个类型
if typeListeners ~= nil then
_Events[stype] = nil
end
end
function EventDispatcher:DumpEvent( )
dump(_Events)
end
return EventDispatcher
项目记录22-- tolua基于lua框架事件派发的更多相关文章
- Tomcat服务器本地的搭建,以及在 IDEA软件下的配置,以及项目的测试运行(基于supermvc框架下的web)
一.声明 使用了基于springmvc的supermvc的web框架.实习公司的框架. 二.tomact的下载与安装 1选择适合自己电脑配置的jdk和jre版本(截图来自tomcat的官方网站http ...
- 开源基于lua gc管理c++对象的cocos2dx lua绑定方案
cocos2dx目前lua对应的c++对象的生命周期管理,是基于c++析构函数的,也就是生命周期可能存在不一致,比如c++对象已经释放,而lua对象还存在,如果这时候再使用,会有宕机的风险,为此我开发 ...
- 基于图像识别框架Airtest的Windows项目自动化测试实践
写在前面 上一篇分享了<基于Sikuli GUI图像识别框架的PC客户端自动化测试实践>,但sikuli看起来怎么都像是上个世纪的界面风格,且功能过于简陋.而同样基于图像识别框架的Airt ...
- Python基于Flask框架配置依赖包信息的项目迁移部署小技巧
一般在本机上完成基于Flask框架的代码编写后,如果有接口或者数据操作方面需求需要把代码部署到指定服务器上. 一般情况下,使用Flask框架开发者大多数都是选择Python虚拟环境来运行项目,不同的虚 ...
- 基于easyui框架中input 类型的checkbox拼接成字符串存入数据库和读取选中---善良公社项目
项目中我做修改用户个人资料的时候,有一个需求是帮助人员的帮助类型如图下所示: 当初想如果是asp.net控件的话应该很简单实现,如果不是基于easyUI框架那就太简单了,现在是受框架的限制与是前端ht ...
- JAVAEE——BOS物流项目10:权限概述、常见的权限控制方式、apache shiro框架简介、基于shiro框架进行认证操作
1 学习计划 1.演示权限demo 2.权限概述 n 认证 n 授权 3.常见的权限控制方式 n url拦截权限控制 n 方法注解权限控制 4.创建权限数据模型 n 权限表 n 角色表 n 用户表 n ...
- 基于vue项目的组件中导入mui框架初始化滑动等效果时需移除严格模式的问题
基于vue项目的组件中导入mui框架初始化滑动等效果时,控制台报错:Uncaught TypeError: 'caller', 'callee', and 'arguments' properties ...
- 一款基于SSM框架技术的全栈Java web项目(已部署可直接体验)
概述 此项目基于SSM框架技术的Java Web项目,是全栈项目,涉及前端.后端.插件.上线部署等各个板块,项目所有的代码都是自己编码所得,每一步.部分都有清晰的注释,完全不用担心代码混乱,可以轻松. ...
- .Net Core 基于CAP框架的事件总线
.Net Core 基于CAP框架的事件总线 CAP 是一个在分布式系统中(SOA,MicroService)实现事件总线及最终一致性(分布式事务)的一个开源的 C# 库,她具有轻量级,高性能,易使用 ...
随机推荐
- 【转】In ASP.NET using jQuery Uploadify upload attachment
Upload Uploadify is a JQuery plug-in, achieve the effect is very good, with progress display. Upload ...
- 利用Aspose.Cells导出Datatable数据
面对一些的格式各样的到处数据的要求,自学了一点 Aspose.Cells中操作Excel知识,如下代码: /// <summary> /// DataTable导出Excel /// &l ...
- pinpoint体系中,关于如何清理过期hbase数据
版本: pinpoint:1.7.1 hbase:1.2.6 命令行命令: $HBASE_HOME/bin/hbase shell newrestruct.hbase 备注:保留一天半的数据(秒 ...
- lua math.random()
math.random([n [,m]]) 用法:1.无参调用,产生[0, 1)之间的浮点随机数. 2.一个参数n,产生[1, n]之间的整数. 3.两个参数,产生[n, m]之间的整数. math. ...
- EditPlus修改主题方法
在“EditPlus.exe”或"EditPlus64.exe"所在的目录下找到"editplus_u.ini"文件(如果不存在就新建一个),修改这个文件即可更 ...
- (转)一个vue路由参数传递的注意点
首先我的路由的定义 { path: '/b', name: 'B', component: resolve => require(['../pages/B.vue'], resolve) } 我 ...
- Android GoogleMap 谷歌地图从零开始
说明 由于国内使用v2最新的谷歌地图有很多限制,所有如果要在真机上测试运行要做一些准备 准备1: vpn必不可少啦 推荐cloud vpn或者betternet都是不错的免费vpn 准备2: 由于最新 ...
- (转载)RxJava 与 Retrofit 结合的最佳实践
RxJava 与 Retrofit 结合的最佳实践 作者:tough1985 感谢 DaoCloud 为作者提供的 500 RMB 写作赞助: 成为赞助方 /开始写作 前言 RxJava和Retrof ...
- Vue报错笔记
1.错误信息:[Vue warn]: Property or method "object" is not defined on the instance but referenc ...
- Dependency Injection in ASP.NET MVC
原文引自http://www.dotnetcurry.com/ShowArticle.aspx?ID=786 1.传统三层结构,相邻两层之间交互: 2.如果使用EntityFramework则View ...