项目记录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# 库,她具有轻量级,高性能,易使用 ...
随机推荐
- php obstart
PHP ob_start() 函数介绍 2010-03-29 php ob_start 与 ob_end_flush() 是 php 的缓冲输出函数. ob_start([string output_ ...
- 第5章分布式系统模式 Data Transfer Object(数据传输对象)
正在设计一个分布式应用程序,为了满足单个客户端请求,您发现自己对一个远程接口发出了多个调用,而这些调用所增加的响应时间超出了可接受的程度. 影响因素 在与远程对象通信时,请考虑下列需要权衡的因素: 远 ...
- [Offer收割]编程练习赛34
共同富裕 显然每次选最大的数字,其余的加一.也可以理解为每次选一个最大的数字减一,直到所有数字都变成最小的数字为止. #include<stdio.h> #include<strin ...
- CSS3 动画 思维导图
思维导图在新窗口打开浏览
- ubuntu 16.04 php5 环境搭建
Ubuntu 16.04默认安装php7.0环境,但是php7目前兼容性并不是很好,如果自行安装php5需要清除php7的已安装包,否则会报错. 移除默认及已安装的PHP包 sudo dpkg -l ...
- (转载) IaaS, PaaS, Saas
如果你是一个网站站长,想要建立一个网站.不采用云服务,你所需要的投入大概是:买服务器,安装服务器软件,编写网站程序. 现在你追随潮流,采用流行的云计算,如果你采用 IaaS 服务,那么意味着你就不用自 ...
- ubuntu安装-Caffe依赖
参考链接:http://my.oschina.net/u/939893/blog/163921 1. 安装numpy相对简单,以下命令可以完成 apt-get install python-numpy ...
- PythonGIS可视化—Matplot basemap工具箱
原文链接:http://www.douban.com/group/topic/32821988/ 原文链接:http://www.cnblogs.com/vamei/archive/2012/09/1 ...
- 我的C++笔记(函数部分)
#include <iostream> #include <cmath>//C++的数学函数库 using namespace std; class Point{ public ...
- chrome、firefox、IE中input输入光标位置错位解决方案
以前在项目里碰到过一个问题 input输入框用一个背景图模拟,设置height和line-height一样的高度,使里面的输入文字能够居中, 在FF下出现的情况是:点击input时,输入光标其实上跟i ...