基于quick-cocos2d-x的LuaSocket范例
这是一个 luasocket 范例。
为了便于使用,我封装了 luasocket 到 cc.net.SocketTCP
类中。这个范例展示如何使用 cc.net.SocketTCP
。
同时,在本范例中还使用了 cc.utils.ByteArray
和 cc.utils.ByteArrayVarint
。
要了解更多关于 cc.net.SocketTCP
和 cc.utils.ByteArray
的信息,请阅读 一个LuaSocket封装 和用lua实现ByteArray和ByteArrayVarint .
在本范例的 net 包中,有3个 lua 类:
- net.PacketBuffer
我们收到的数据包经常是不完整的,特别是当数据包比较大的时候。因此我们必须确保数据包完整才能使用。PacketBuffer 就是做这件事的。 - net.Protocol
这个类把数据包解析成人类可读的格式。它转换一个数据包到一个lua table,并且为每个数据项命名。数据项的名称定义在 net.protocols 文件中。 - net.protocols
这是你的协议定义文件。你可以写一个生成器程序来生成它。
下面是本范例运行的log文件。当然,你需要自己实现服务端程序。
[0.2467] [INFO] socket.getTime:1389319197.462940
[0.2472] [INFO] os.gettime:1389319197.000000
[0.2477] [INFO] socket._VERSION: LuaSocket 2.1-rc1
[0.2530] [INFO] Scene "MainScene:onEnter()"
[1.9754] [INFO] socket status: SOCKET_TCP_CONNECTED
[5.8635] send 1000 packet: 86 7B 00 0B 00 00 00 B1 04 00 03 00 08 10 C0 3E 01 01
[5.8859] socket receive raw data: 86 7B 00 60 00 00 00 00 7D 00 0D 00 09 11 18 20 28 30 38 40 48 50 58 60 00 3C 63 73 76 3D 34 38 32 28 30 31 30 39 2E 31 35 33 32 32 38 29 0A 66 73 3D 31 33 31 28 30 31 30 39 2E 31 35 33 31 35 31 29 0A 67 73 3D 33 35 32 28 30 31 30 39 2E 31 38 30 33 32 37 29 04 74 65 73 74 00 14 50 D6 03 96 01 00 00 00 0F 6E 103
[5.8873] start analyzing... buffer len: 103, available: 103
[5.8878] method:2000
[5.8884] before get meta position:11
[5.8897] after get meta position:25
[5.8904] after get body position:104
[5.8909] dump from: [string "d:/cocos2dx/quick/samples/luasocket/scripts/scenes/MainScene.lua"]:54: in function <[string "d:/cocos2dx/quick/samples/luasocket/scripts/scenes/MainScene.lua"]:48>
[5.8921] - "<var>" = {
[5.8924] - "body" = {
[5.8931] - "ap" = 0
[5.8938] - "crystal" = 150
[5.8944] - "dust" = 0
[5.8950] - "gold" = 470
[5.8955] - "goodsMaxNum" = 110
[5.8959] - "goodsNum" = 15
[5.8965] - "lv" = 20
[5.8971] - "mithril" = 0
[5.8975] - "money" = 80
[5.8981] - "flag" = 0
[5.8987] - "name" = "test"
[5.8993] - "sex" = 0
[5.8999] - "ver" = "csv=482(0109.153228)\nfs=131(0109.153151)\ngs=352(0109.180327)"
[5.9008] - }
[5.9013] - "method" = 2000
[5.9019] - "ver" = 0
[5.9025] - }
基于quick-cocos2d-x的LuaSocket范例的更多相关文章
- 【Q2D】如何导出自定义C++类给框架使用
本文基于Quick cocos2d x这个游戏框架,为了行文流畅,后面都简称Q2D 导出自定义c++类给项目使用已经有了现成的例子了 详见:http://quick.cocos.org/?p=235 ...
- 基于 UML 的业务建模举例
简介: 对于管理流程咨询项目.大型信息化建设项目和套装管理软件实施项目,对业务环境的分析和理解对项目的成功至关重要.系统.全面理解 IT 系统所处的业务环境,可以帮助 IT 系统能提供正确系统功能,并 ...
- Quick BI功能篇之(一):20分钟入门
前言: 最近小编帮助隔壁团队一个小姐姐解决了个大难题:给老板汇报业绩分析,频次提高.效率提升,还得保证团队中的小伙伴们都得有点大数据时代的基本数据能力.小编觉得这么好的经验可以分享给更多志同道合的朋友 ...
- Quick BI独创千人千面的行级权限管控机制
摘要 就数据访问权限而言,阿里巴巴以“被动式授权”为主,你需要什么权限就申请什么权限.但是,在客户交流过程中,我们发现绝大多数企业都是集中式授权,尤其是面向个人的行级权限管控,管理复杂度往往呈几何增长 ...
- SaaS系列介绍之十三: SaaS系统体系架构
1 系统体系架构设计 软件开发中系统体系架构决定了一个系统稳定性.健壮性.可扩展性.兼容性和可用性,它是系统的灵魂.体系架构是架构师所关注的核心.良好的体系架构是系统成功的开端,否则,再好的代码与设计 ...
- OpenStackCLI调试及术语识记
1,Project are organizational units in the cloud,and are also known as tenants or accounts.Each user ...
- man rsync翻译(rsync命令中文手册)
本文为命令rsync的man文档翻译,几乎所有的选项都翻译了,另外关于筛选规则部分只翻译了一部分.由于原文很多地方都比较啰嗦,所以译文中有些内容可能容易让国人疑惑,所以我个人在某些地方加上了注释.若有 ...
- RTKLIB编译及RTCM数据读取样例
1.RTKLIB简介 RTKLIB是全球导航卫星系统GNSS(global navigation satellite system)的标准&精密定位开源程序包,RTKLIB由日本东京海洋大学( ...
- QT QQuickView嵌入到QT MDI中
在学习QT的过程中发现有一个特别炫酷的行星例子“planets”,有两种实现版本: 一种是基于Qt 3D QML(planets-qml),另一种则是基于Quick和强大的Three.js(plane ...
随机推荐
- http://blog.csdn.net/congcong68/article/details/39256307
http://blog.csdn.net/congcong68/article/details/39256307
- Android 面试题目汇总
内容源自:2017-2018最新Android面试题 以下是几点重点,是面试官基本必问的问题,请一定要去了解! 基础知识 – 四大组件(生命周期,使用场景,如何启动) java基础 – 数据结构,线程 ...
- centos6.8服务器配置之vsftpd配置
vsftpd: version 2.2.2一.安装:因对版本要求不高,所以采用yum安装 yum install -y vsftpdckconfig vsftpd on 二.配置: 1.建立ftp用户 ...
- 关于mysql存储过程创建动态表名及參数处理
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 近期游戏開始第二次内測,開始处理操作日志.最開始把日志放到同一个表里面,发现一天时间,平均100玩家 ...
- Android AES加密算法及其实现
找到了AES加密算法.(当然还有MD5,BASE64什么的http://snowolf.iteye.com/blog/379860这篇文章列举了很多,但是基本都是j2se平台的,android平台不一 ...
- 无埋点数据收集和adb monkey测试屏蔽通知栏
简单记录百度移动统计android无埋点sdk使用和monkey测试屏蔽通知栏的问题 1.无埋点sdk使用 很简单,下载完sdk后导入到项目中 , 参考sdk文档进行就可以了,个人觉得比友盟还简单,几 ...
- Android Studio修改项目名和包名
为了提高开发效率,有时候需要使用现有的一些开源项目,记录一下自己修改项目名和包名的方法. 1.首先,修改包名(清单文件里找), ①展开所有包 ②选中想要修改的包,shift+F6(也可右键Refact ...
- ionic emulate android log
RubertdeMacBook-Pro:myApp Rubert$ ionic emulate android Running command: /Users/Rubert/myApp/hooks/a ...
- struts2 页面向Action传参方式
1.基本属性注入 我们可以直接将表单数据项传递给Action,而Action只需要提供基本的属性来接收参数即可,这种传参方式称为基本属性注入.例如 jsp页面: <s:form method=& ...
- SecureCRT 默认配置
1.配置默认设置