一个LuaSocket封装
2014-01-10更新: SocketTCP 已经进入 quick-cocos2d-x 的 framework.
在 [quick-cocos2d-x 中的 socket 技术选择:LuaSocket 和 WebSocket][1] 一文中,我提到了选择 [LuaSocket][2] 与服务器通信。
为了方便使用,我对LuaSocket进行了封装。封装主要做了这样几件事:
- 封装基于 LuaSocket 的 TCP 模式,使用 settimeout 实现异步调用;
- 利用 cocos2d-x 提供的定时器实现失败重连;
- 利用 quick-cocos2d-x 提供的 framework.api.EventProtocol 实现了事件的注册和发布。
这个封装完全依赖 quick-cocos2d-x ,因此不能单独在lua环境中使用。
这个封装修改自 quick 论坛的一个源码 ,感谢原作者!
下面的例子依赖 ByteArray,详情看这里:用lua实现ByteArray和ByteArrayVarint 。
socket = SocketTCP.new("192.168.18.22", 12001, false) socket:addEventListener(SocketTCP.EVENT_CONNECTED, onStatus) socket:addEventListener(SocketTCP.EVENT_CLOSE, onStatus) socket:addEventListener(SocketTCP.EVENT_CLOSED, onStatus) socket:addEventListener(SocketTCP.EVENT_CONNECT_FAILURE, onStatus) socket:addEventListener(SocketTCP.EVENT_DATA, onData)
socket:send(ByteArray.new():writeByte(0x59):getPack())
function onStatus(__event)
echoInfo("socket status: %s", __event.name)
end
function onData(__event)
echoInfo("socket status: %s, data:%s", __event.name, ByteArray.toString(__event.data))
end
SocketTCP 位于我的 lua库 项目中。
在实际使用的过程中,要处理数据粘包、协议解析、数据还原、数据压缩之类的具体情况,因此我写了一个 sample 来说明如何使用 ByteArray 和 SocketTCP 来做这些事。具体请参考:基于QUICK-COCOS2D-X的LUASOCKET范例 。
这个范例已经被我提交到了 quick-cocos2d-x sample 。
我会把自己在游戏中常用的 lua 功能陆续整合进入这个开源库,就像我的 as3库 和 java库 一样。
- 文章ID:1980
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/lua_sockettcp/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。