刚学习了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_IP self.port = SERVER_PORT self.isRetryConnect = false self.isConnected = false self.Listener = {} self.nextListenerID = 0 self.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,self.onStatus)) self.socket:addEventListener(SocketTCP.EVENT_CLOSED,self.onStatus)) self.socket:addEventListener(SocketTCP.EVENT_CONNECT_FAILURE,self.onStatus)) self.socket:addEventListener(SocketTCP.EVENT_DATA,self.onData))endfunction olafSocket:connect(obj) if 'table' ~= type(obj) then printError("olafSocket:connect require parameter 1 to be a table") return nil end assert(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) then printError("olafSocket:dispatchEvent() - invalID param") return nil end if self.Listener[__event.name] == nil then if DEBUG > 1 then printInfo("event name :%s no Listener.",__event.name) end return true end for ID,Listener in pairs(self.Listener[__event.name]) do -- Listener[1] = handler() -- Listener[2] = tag ret = Listener[1](__event) if __event.stop == true and ret == true then break end end return trueendfunction olafSocket:onStatus(__status) if __status.name == SocketTCP.EVENT_CONNECTED then self.isConnected = true end if __status.name == SocketTCP.EVENT_CLOSED then self.isConnected = false end ret = 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 end assert(type(__eventname) == "string" and __eventname ~= "","olafSocket:addListener() - require parameter 2 to be a string") if obj.Listener[__eventname] == nil then obj.Listener[__eventname] = {} end -- Listener[1] = handler() -- Listener[2] = tag tag = tag or "" obj.nextListenerID = obj.nextListenerID + 1 obj.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,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 end if DEBUG > 1 then printInfo("Send Data") for k,v in pairs(__data) do print(k,v) end end if obj.isConnected == false then printError("olafSocket:sendData require connect first") return nil end obj.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,__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总结
以上是内存溢出为你收集整理的对qucik cocos2dx lua SocketTCP的再一次封装,导入全局实例,包含自定义事件全部内容,希望文章能够帮你解决对qucik cocos2dx lua SocketTCP的再一次封装,导入全局实例,包含自定义事件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)