怎么把protubuf的message写入ByteArray,并用luaSocket发送??

怎么把protubuf的message写入ByteArray,并用luaSocket发送??
这些资料少得很,网上就只有一个ByteArray说明,而且连demo方法都不全,
官方demo有用吗?和protubuf完全不搭…

quick的现状就是,把简单的问题更简单化了,把复杂的问题变得更复杂.

说的很有道理…呵呵…现在的Quick还是有很多不恰当的地方.希望开发组能越做越棒,

这里有一个简介:http://zengrong.net/post/2020.htm

samples/luasocket 是一个完整的客户端例子,我不知道 “demo方法都不全” 怎么理解。

官方没有宣传过采用Protocol Buffer 技术。我只是在博客上提到其中的 varint编码:http://zengrong.net/post/1968.htm

准确的说,ByteArrayVarint 是一个实现了Protocol Buffer 中的 Varint 编码的工具类,并不是完整的 Protocol Buffer。所以 “完全不搭” 是不正确的说法。

samples/luasocket 包含完整的拆包、解包、编码、队列功能的演示,甚至实现了一个完整的数据包解析器,将收到的数据包生成lua table。我是直接把我的游戏项目中的网络部分源码发上来了,我不知道还需要多少解释。一句句地写中文注释么?

如果不清楚,请提问。发牢骚解决不了问题。

我觉得你应该把ByteArray的用法仔细的说一下吧,而不是一句话,和AS的一样,就是改了一些名字,我没用过AS,是不是还得跑去看看AS怎么实现这些的?

for i=1,#__fmt do
local __f = __fmt:sub(i,i)
if __f == “R” then
__buf:writeUVInt(__body*)
elseif __f == “S” then
__buf:writeStringUVInt(__body*)
elseif __f == “r” then
__buf:writeVInt(__body*)
else
error(__f … " is a unavailable type! You can only use a type in RSr.")
end
end
“fmt”] = “RSSR10”,
这些是干什么的?加密吗??后面的

没服务端我怎么能测试到结果?


我需要把protobuf发送出去,需要打包到一个ByteArrayVarint里,数据头是数据长度
local __buf = ByteArrayVarint.new()
对于PB的Base 128 Varints编码
__buf:writeVInt(request:ByteSize());
应该是这样吧?
那数据呢?我有一串字符串要放进__buf里面,是用writeByte()?还是writeStringUShort()??
我在你的代码里面没发现有用到写字符的方法…

首先感谢Jacky(zrong)的无私分享。

我现在的需求也是需要在数据头发送一个数据长度,接收方以此数据长度来判断接收结束。
我看socketTCP里面默认的是*a作为结束标志,作为一个lua新手,如果要自己修改的话,
还是比较有难度的,如果socketTCP能本身也能支持以数据长度字段来判断接收就好了。

ByteArray只用于数据的组包和解包。使用时需要根据自己使用的协议,调用ByteArray的接口来组织要发送的数据。因此它不可能直接把protobuf的一个message直接转成数据流,而是需要将message里的字段一个个的写入。

ByteArray是3楼的Jacky无私奉献的一套封装代码,在luasocket和lpack的基础上封装了完整的数据组包和解包功能,已经大大的化简了使用,我不知道楼主的“把复杂的问题变得更复杂”的说法从何而来?如果你觉得这样反而复杂了,你可以自己使用luasocket和lpack来实现protobuf协议,我的上一个项目就是这么做的,实际上也不麻烦。当然如果现在做,我还是会选择使用Jacky的封装。

我的意思就是想自己使用luasocket和lpack来实现protobuf协议,但是没lpack这方面的资料啊…

不是以*a作为结束标记,你理解错了。
TCP建立后就是一直在接收,并将收到的数据放入缓冲区,等待应用协议层来处理。数据长度的判断,是协议层要做的事情。如果ByteArray在接收时还要判断长度,反而不通用了。

我是在一年前实现的,当时luasocket和lpack我也是第一次接触,甚至Lua也刚学。在实现过程中,我是只靠查网上的资料来最后完成的。我想现在的资料不会比当时还少吧。

是多是少,这个还真不好说,
我今年3月开始学C++并做项目的,项目能很快上手,qq群的人很热心.
后来听说quickx是一个能快速开发的,还能动态热更新,我看中了这两点,就想转用quickx,
用quickx的时候,那QQ群半天都没人说一句话,当我开口的时候,就一大群人跟着同问…
那些管理员平时都是在"睡觉"的.还有那些文档,严重缺失,
我在搭建环境的时候,也折腾了几天,按照文档的根本就跑不起来,在QQ群问,群管理都在"睡觉",好几个新人也在问这个问题…
,如果是说做cocos那套是很简单,这在C++去做也是很简单的,这就是"简单的更简单了".
但是搞这些socket的,就开始复杂了,这也就是"复杂的变更复杂了".我是lua菜鸟,我接触lua才一周左右.
我只想能能有一个让我快速开发的环境,开发不是问题,但是在搞这些乱七八糟的东西,找资料都找半天,还不一定能找到.

只能说,我学习过程的感受和你不一样了。
以后有问题,在这边发帖吧,只要问题描述清楚,会有很多人回答你的。我也基本上每天会来这里,如果有能够回答的,我一定会回复的。

求问一下,我想在cocos2dx-3.3中使用楼主实现的ByteArray可行否?要怎样才能在cocos2dx-3.3的lua项目中使用楼主的这一套ByteArray呢?

quick的使用已经够简洁了,现在已经够一键安装包,要是换了最早要去github上clone的话,楼主你还怎么玩?
luasocket,lpack这些库都已经提供了,网上资料大把的,这是需要你自己去看的东西,何况jacky还进行了封装!
protobuf的使用这本就不在quick的指导范畴,使用者也各有各的使用方式!
有问题就具体问题具体分析,有针对性的提问撒!

我现在也遇到一个问题,想请教下曾大大,我这边用云风的pbc 生成了一个protobuf的协议,我现在要在这个协议前面加一个,消息id 和 消息的唯一标示码,应该怎么写入到数据中咧

markmakrmakrmkarmkarm

可否提供下当时你用到的lpack.h文件,因为现在去下载的lpack编译不通过.