Cocos2dx-lua采用pbc解析protobuf 不支持message嵌套和枚举不支持整数的处理方法

在Cocos2dx-lua项目中使用pbc解析protobuf时遇到嵌套message解析不完全的问题,通过调用decodeAll方法可解决嵌套message输出异常。此外,pbc默认将枚举解析为字符串,通过修改protpbuf.lua文件,可以在序列化和反序列化时支持枚举整数,但需要在lua中重新定义枚举值。
摘要由CSDN通过智能技术生成

  • PBC不支持嵌套message的解析

在cocos2dx-lua中应用pbc解析protobuf协议格式发现,其对嵌套消息的解析很不友好。 经过for pairs循环检验发现,decode方法并没有解析内部嵌套的子消息。


进一步检查发现,子消息的输出格式为table:第一个字段为子消息的名字, 第2个字段为一个奇怪的字符串(一般为子消息的第一个字段)。进行了各种尝试,发现只要访问一次子消息实际存在的字段,则子消息的结构自动输出为正常。


很奇怪吧!大神的代码总是用各种元表奇奇怪怪的实现来追求效率, 而实际游戏开发中总是需要各种通用的写法。


如果不能对字段进行打印调试毫无疑问是没办法正常开发的,最后发现只要针对子消息结构调用一次decode则可以解决嵌套消息无法正常输出的问题。需要编写下面代码

修改:protpbuf.lua

增加以下方法

function decodeAll(typename, buffer)
   local ret = decode(typename, buffer, length)
   if ret then
      decodeTable(ret)
   end
   return ret
end
 
function decodeTable(tbl)
   for k,v in pairs(tbl) do
       if type(v) == "table" then
          --这里的xxxx请自行替换成protobuf的package
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值