对qucik cocos2dx lua SocketTCP的再一次封装,导入全局实例,包含自定义事件

前端之家收集整理的这篇文章主要介绍了对qucik cocos2dx lua SocketTCP的再一次封装,导入全局实例,包含自定义事件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

刚学习了lua两三天,对socket通信做了个自己的封装,导入全局实例,加入自定义事件分发,请大家多多指教

  1. --
  2. -- Author: peilin
  3. -- Date: 2015-01-22 11:10:35
  4. --
  5. local Component = require("framework.cc.components.Component")
  6. local SocketTCP = require("framework.cc.net.SocketTCP")
  7.  
  8. local SERVER_IP = "127.0.0.1"
  9. local SERVER_PORT = 8888
  10.  
  11. local OlafSocket = class("OlafSocket",Component)
  12.  
  13. --OLAF EVENT
  14. OlafSocket.EVENT_CLOSE = "SOCKET_TCP_CLOSE"
  15. OlafSocket.EVENT_CLOSED = "SOCKET_TCP_CLOSED"
  16. OlafSocket.EVENT_CONNECTED = "SOCKET_TCP_CONNECTED"
  17. OlafSocket.EVENT_CONNECT_FAILURE = "SOCKET_TCP_CONNECT_FAILURE"
  18.  
  19. OlafSocket.EVENT_OLAF_DATA = "OLAF_DATA"
  20.  
  21. function OlafSocket:ctor(__name,...)
  22. self.name = __name or 'OlafSocket'
  23. self.host = SERVER_IP
  24. self.port = SERVER_PORT
  25. self.isRetryConnect = false
  26. self.isConnected = false
  27.  
  28. self.listener = {}
  29. self.nextListenerID = 0
  30.  
  31. self.socket = SocketTCP.new(self.host,self.port,self.isRetryConnect)
  32. self.socket:addEventListener(SocketTCP.EVENT_CONNECTED,handler(self,self.onStatus))
  33. self.socket:addEventListener(SocketTCP.EVENT_CLOSE,self.onStatus))
  34. self.socket:addEventListener(SocketTCP.EVENT_CLOSED,self.onStatus))
  35. self.socket:addEventListener(SocketTCP.EVENT_CONNECT_FAILURE,self.onStatus))
  36. self.socket:addEventListener(SocketTCP.EVENT_DATA,self.onData))
  37. end
  38.  
  39. function OlafSocket:connect(obj)
  40. if 'table' ~= type(obj) then
  41. printError("OlafSocket:connect require parameter 1 to be a table")
  42. return nil
  43. end
  44.  
  45. assert(obj.socket,"Invalid socket object")
  46. obj.socket:connect()
  47. return true
  48. end
  49.  
  50. function OlafSocket:disConnect( obj )
  51. if 'table' ~= type(obj) then
  52. printError("OlafSocket:connect require parameter 1 to be a table")
  53. return nil
  54. end
  55. if not obj.socket then return nil end
  56. print("disconnect()")
  57. obj.socket:disconnect()
  58.  
  59. return true
  60. end
  61.  
  62. function OlafSocket:dispatchEvent(__event)
  63. if 'table' ~= type(__event) then
  64. printError("OlafSocket:dispatchEvent() - invalid param")
  65. return nil
  66. end
  67.  
  68. if self.listener[__event.name] == nil then
  69. if DEBUG > 1 then
  70. printInfo("event name :%s no listener.",__event.name)
  71. end
  72. return true
  73. end
  74.  
  75. for id,listener in pairs(self.listener[__event.name]) do
  76. -- listener[1] = handler()
  77. -- listener[2] = tag
  78. ret = listener[1](__event)
  79. if __event.stop == true and ret == true then
  80. break
  81. end
  82. end
  83.  
  84. return true
  85. end
  86.  
  87. function OlafSocket:onStatus(__status)
  88.  
  89. if __status.name == SocketTCP.EVENT_CONNECTED then
  90. self.isConnected = true
  91. end
  92. if __status.name == SocketTCP.EVENT_CLOSED then
  93. self.isConnected = false
  94. end
  95. ret = self:dispatchEvent({name = __status.name,stop = true})
  96. return ret
  97. end
  98.  
  99. function OlafSocket:onData( __data )
  100. ret = self:dispatchEvent({name = OlafSocket.EVENT_OLAF_DATA,stop = true,data = __data.data})
  101. return ret
  102. end
  103.  
  104. function OlafSocket:addListener(obj,__eventName,__listener,tag)
  105. if 'table' ~= type(obj) then
  106. printError("OlafSocket:addListener require parameter 1 to be a table")
  107. return nil
  108. end
  109. assert(type(__eventName) == "string" and __eventName ~= "","OlafSocket:addListener() - require parameter 2 to be a string")
  110.  
  111. if obj.listener[__eventName] == nil then
  112. obj.listener[__eventName] = {}
  113. end
  114. -- listener[1] = handler()
  115. -- listener[2] = tag
  116. tag = tag or ""
  117. obj.nextListenerID = obj.nextListenerID + 1
  118. obj.listener[__eventName][obj.nextListenerID] = {__listener,tag}
  119. return true
  120. end
  121.  
  122. function OlafSocket:removeListeners(obj,__listener)
  123. if 'table' ~= type(obj) then
  124. printError("OlafSocket:sendData require parameter 1 to be a table")
  125. return nil
  126. end
  127.  
  128. for event,handlers in pairs(obj.listener) do
  129. for listenerID,listener in pairs(handlers) do
  130. if listener[1] == __listener then
  131. handlers[listenerID] = nil
  132. end
  133. end
  134. end
  135. return true
  136. end
  137.  
  138. function OlafSocket:removeListenersByTag(obj,__tagToRemove)
  139. if 'table' ~= type(obj) then
  140. printError("OlafSocket:sendData require parameter 1 to be a table")
  141. return nil
  142. end
  143.  
  144. for event,listener in pairs(handlers) do
  145. if listener[2] == __tagToRemove then
  146. handlers[listenerID] = nil
  147. end
  148. end
  149. end
  150. return true
  151. end
  152.  
  153. function OlafSocket:removeListenersByEvent(obj,__eventToRemove)
  154. if 'table' ~= type(obj) then
  155. printError("OlafSocket:sendData require parameter 1 to be a table")
  156. return nil
  157. end
  158.  
  159. obj.listener[__eventToRemove] = nil
  160. return true
  161. end
  162.  
  163.  
  164. function OlafSocket:removeAllListener( obj )
  165. if 'table' ~= type(obj) then
  166. printError("OlafSocket:sendData require parameter 1 to be a table")
  167. return nil
  168. end
  169.  
  170. obj.listener = nil
  171. end
  172.  
  173. function OlafSocket:sendData(obj,__data)
  174. if 'table' ~= type(obj) then
  175. printError("OlafSocket:sendData require parameter 1 to be a table")
  176. return nil
  177. end
  178. if DEBUG > 1 then
  179. printInfo("Send Data")
  180. for k,v in pairs(__data) do
  181. print(k,v)
  182. end
  183. end
  184. if obj.isConnected == false then
  185. printError("OlafSocket:sendData require connect first")
  186. return nil
  187. end
  188. obj.socket:send(__data)
  189.  
  190. return true
  191. end
  192.  
  193. -- register global _G
  194.  
  195. OlafSocket.global = OlafSocket.new("OlafSocket_G")
  196.  
  197.  
  198. function OlafSocket.global:connect()
  199. return OlafSocket:connect(self)
  200. end
  201.  
  202. function OlafSocket.global:disConnect()
  203. return OlafSocket:disConnect(self)
  204. end
  205.  
  206. function OlafSocket.global:sendData(__data)
  207. return OlafSocket:sendData(self,__data)
  208. end
  209.  
  210. function OlafSocket.global:addListener(__eventName,__listener)
  211. return OlafSocket:addListener(self,__listener)
  212. end
  213.  
  214. function OlafSocket.global:removeListeners( __listener )
  215. return OlafSocket:removeListeners(self,__listener)
  216. end
  217. function OlafSocket.global:removeListenersByTag(__tagToRemove)
  218. return OlafSocket:removeListenersByTag(self,__tagToRemove)
  219. end
  220. function OlafSocket.global:removeListenersByEvent( __event )
  221. return OlafSocket:removeListenersByEvent(self,__event)
  222. end
  223. function OlafSocket.global:removeAllListener()
  224. return OlafSocket:removeAllListener(self)
  225. end
  226.  
  227.  
  228.  
  229. _G.OlafNet = _G.OlafNet or {}
  230. _G.OlafNet.OlafSocket = OlafSocket
  231.  
  232. return OlafSocket

猜你在找的Cocos2d-x相关文章