项目记录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# 库,她具有轻量级,高性能,易使用 ...
随机推荐
- 表格td内容过多时,td显示省略号,鼠标移入显示全部内容。
转自:https://blog.csdn.net/weixin_42193908/article/details/80405014 两种方式显示: 1.title方式显示: <!DOCTYPE ...
- C#缓存
最近在学习缓存的知识,博客园中的 缓存资料 觉得信息不错值得学习
- ssh 免密码登入远程服务器
生成ssh密钥,将公钥上传至远程服务器~/.ssh目录下面(没有的话就建一个): ssh-keygen -t rsa scp ~/.ssh/id_rsa.pub root@yourserver.com ...
- UVa340未完成
#include<stdio.h> #define maxn 1010 int main() { ; while(scanf("%d",&num)!=EOF&a ...
- chrome、firefox、IE中input输入光标位置错位解决方案
以前在项目里碰到过一个问题 input输入框用一个背景图模拟,设置height和line-height一样的高度,使里面的输入文字能够居中, 在FF下出现的情况是:点击input时,输入光标其实上跟i ...
- 克隆CentOS 6.9 配置静态IP,重启网络服务时报错
克隆的CentOS 6.9 第一次开机时,VMware workstation会为新虚拟机自动生成新mac地址,导致虚拟机配置文件中mac地址与虚拟机新mac地址不一致. 解决方法:1. 修改网卡配置 ...
- Linux常用命令速查
索引表格 命令 功能简述 目录与文件基本操作 pwd 显示当前目录 ls 列出目录和文件名称 cp 复制文件或目录 mv 移动或更名现有的文件或目录 rm 删除文件或目录 mkdir 新建目录 rmd ...
- iOS,android 常用命令
iOS 常用命令: https://blog.csdn.net/ilikekand17/article/details/81907179 https://www.jianshu.com/p/72c62 ...
- Python基础学习_01字符串的拼接(字符串的格式化输出)
# 字符串的拼接 ---字符串的格式化输出 # 字符串的拼接 ---字符串的格式化输出 name = input("name:") age = input("age:&q ...
- python之UnittTest模块
一. UnitTest单元测试框架 1.1概述 unittest原名为PyUnit,是由java的JUnit衍生而来.单元测试是对程序中最小的可测试模块(函数)来进行测试:对于单元测试,需要设置预先条 ...