对qucik cocos2dx lua SocketTCP的再一次封装,导入全局实例,包含自定义事件
来源:互联网 发布:数据情报 编辑:程序博客网 时间:2024/05/01 23:17
刚学习了lua两三天,对socket通信做了个自己的封装,导入全局实例,加入自定义事件分发,请大家多多指教
---- Author: peilin-- Date: 2015-01-22 11:10:35--local Component = require("framework.cc.components.Component")local SocketTCP = require("framework.cc.net.SocketTCP")local SERVER_IP = "127.0.0.1"local SERVER_PORT = 8888local OlafSocket = class("OlafSocket", Component)--OLAF EVENTOlafSocket.EVENT_CLOSE = "SOCKET_TCP_CLOSE"OlafSocket.EVENT_CLOSED = "SOCKET_TCP_CLOSED"OlafSocket.EVENT_CONNECTED = "SOCKET_TCP_CONNECTED"OlafSocket.EVENT_CONNECT_FAILURE = "SOCKET_TCP_CONNECT_FAILURE"OlafSocket.EVENT_OLAF_DATA = "OLAF_DATA"function OlafSocket:ctor(__name,...)self.name = __name or 'OlafSocket'self.host = SERVER_IPself.port = SERVER_PORTself.isRetryConnect = falseself.isConnected = falseself.listener = {}self.nextListenerID = 0self.socket = SocketTCP.new(self.host, self.port, self.isRetryConnect)self.socket:addEventListener(SocketTCP.EVENT_CONNECTED, handler(self, self.onStatus))self.socket:addEventListener(SocketTCP.EVENT_CLOSE, handler(self,self.onStatus))self.socket:addEventListener(SocketTCP.EVENT_CLOSED, handler(self,self.onStatus))self.socket:addEventListener(SocketTCP.EVENT_CONNECT_FAILURE, handler(self,self.onStatus))self.socket:addEventListener(SocketTCP.EVENT_DATA, handler(self,self.onData))endfunction OlafSocket:connect(obj)if 'table' ~= type(obj) then printError("OlafSocket:connect require parameter 1 to be a table") return nil endassert(obj.socket,"Invalid socket object")obj.socket:connect()return trueendfunction OlafSocket:disConnect( obj )if 'table' ~= type(obj) then printError("OlafSocket:connect require parameter 1 to be a table") return nil end if not obj.socket then return nil end print("disconnect()") obj.socket:disconnect() return trueendfunction OlafSocket:dispatchEvent(__event)if 'table' ~= type(__event) thenprintError("OlafSocket:dispatchEvent() - invalid param")return nilendif self.listener[__event.name] == nil thenif DEBUG > 1 thenprintInfo("event name :%s no listener.", __event.name)endreturn trueendfor id,listener in pairs(self.listener[__event.name]) do-- listener[1] = handler()-- listener[2] = tagret = listener[1](__event)if __event.stop == true and ret == true then breakendendreturn trueendfunction OlafSocket:onStatus(__status)if __status.name == SocketTCP.EVENT_CONNECTED thenself.isConnected = trueendif __status.name == SocketTCP.EVENT_CLOSED thenself.isConnected = falseendret = self:dispatchEvent({name = __status.name,stop = true})return retendfunction OlafSocket:onData( __data )ret = self:dispatchEvent({name = OlafSocket.EVENT_OLAF_DATA,stop = true,data = __data.data})return retendfunction OlafSocket:addListener(obj, __eventName, __listener,tag)if 'table' ~= type(obj) then printError("OlafSocket:addListener require parameter 1 to be a table") return nil endassert(type(__eventName) == "string" and __eventName ~= "", "OlafSocket:addListener() - require parameter 2 to be a string")if obj.listener[__eventName] == nil thenobj.listener[__eventName] = {}end-- listener[1] = handler()-- listener[2] = tagtag = tag or ""obj.nextListenerID = obj.nextListenerID + 1obj.listener[__eventName][obj.nextListenerID] = {__listener,tag}return trueendfunction OlafSocket:removeListeners(obj,__listener)if 'table' ~= type(obj) then printError("OlafSocket:sendData require parameter 1 to be a table") return nil end for event,handlers in pairs(obj.listener) do for listenerID,listener in pairs(handlers) do if listener[1] == __listener then handlers[listenerID] = nil end end end return trueendfunction OlafSocket:removeListenersByTag(obj,__tagToRemove)if 'table' ~= type(obj) then printError("OlafSocket:sendData require parameter 1 to be a table") return nil end for event,handlers in pairs(obj.listener) do for listenerID,listener in pairs(handlers) do if listener[2] == __tagToRemove then handlers[listenerID] = nil end end end return trueendfunction OlafSocket:removeListenersByEvent(obj,__eventToRemove)if 'table' ~= type(obj) then printError("OlafSocket:sendData require parameter 1 to be a table") return nil end obj.listener[__eventToRemove] = nil return trueendfunction OlafSocket:removeAllListener( obj )if 'table' ~= type(obj) then printError("OlafSocket:sendData require parameter 1 to be a table") return nil end obj.listener = nilendfunction OlafSocket:sendData(obj, __data)if 'table' ~= type(obj) then printError("OlafSocket:sendData require parameter 1 to be a table") return nil endif DEBUG > 1 thenprintInfo("Send Data")for k,v in pairs(__data) doprint(k,v)endendif obj.isConnected == false thenprintError("OlafSocket:sendData require connect first")return nilendobj.socket:send(__data)return trueend-- register global _GOlafSocket.global = OlafSocket.new("OlafSocket_G")function OlafSocket.global:connect()return OlafSocket:connect(self)endfunction OlafSocket.global:disConnect()return OlafSocket:disConnect(self)endfunction OlafSocket.global:sendData(__data)return OlafSocket:sendData(self, __data)endfunction OlafSocket.global:addListener(__eventName, __listener)return OlafSocket:addListener(self, __eventName, __listener)endfunction OlafSocket.global:removeListeners( __listener )return OlafSocket:removeListeners(self,__listener)endfunction OlafSocket.global:removeListenersByTag(__tagToRemove)return OlafSocket:removeListenersByTag(self,__tagToRemove)endfunction OlafSocket.global:removeListenersByEvent( __event )return OlafSocket:removeListenersByEvent(self,__event)endfunction OlafSocket.global:removeAllListener()return OlafSocket:removeAllListener(self)end_G.OlafNet = _G.OlafNet or {}_G.OlafNet.OlafSocket = OlafSocketreturn OlafSocket
0 0
- 对qucik cocos2dx lua SocketTCP的再一次封装,导入全局实例,包含自定义事件
- cocos2DX-lua 点击事件封装
- quick cocos2dx-Lua中的自定义事件的使用
- cocos2dx 的自定义事件
- 对cocos2dx lua中http请求的简要封装和使用
- 对cocos2dx lua中http请求的简要封装和使用
- lua 中处理cocos2dx 的button 事件
- cocos2dx lua自定义lua-binding
- cocos2dx 自定义绑定lua
- Cocos2dx 下对sqlite3 的简单封装
- quick lua中使用SocketTCP
- cocos2dx-lua中实现面向对象的封装继承
- 在cocos2dx-lua上导入sproto的相关配置
- cocos2dx 自定义触摸事件的分发
- 【cocos2dx 3.10】自定义事件的实现
- qucik cocos2d lua http 登陆下载图片以及下载文件后的解压缩
- 【Cocos2dx 3.3 Lua】定时器事件
- Cocos2dx-lua触摸事件处理
- 顺序表实现队列-栈
- Android官方入门文档[3]构建一个简单的用户界面
- Excel中经纬度数据转换公式
- Android 系统的自启动原理
- ACM-选夫婿(结构体排序练习)
- 对qucik cocos2dx lua SocketTCP的再一次封装,导入全局实例,包含自定义事件
- NodeJs初学者经典入门解析
- mysql 线程查看管理
- c语言学习之顺序表操作
- 开启硬件加速 导致花屏问题 OpenGlRenderer 0x506 解决办法
- JTAG调试原理
- [资料整理]记一下英特尔atom处理器
- DropDownList 的使用
- 调试器工作原理(1):基础篇