proto-gen AS3版本的protobuf extension反序列化错误解决方法

转载请注明:http://blog.csdn.net/herm_lib/article/details/8330493

前段时间用了 proto-gen AS3版本的 protobuf,用到了extension的时候,出事了,表现为,有时候反序列成功,有时候又失败,各种未定义行为。因为,先前用C++版本都很顺利,所以惯性上认为是自己代码有问题,然后各种排查,无果。然后,问同事,他们都没用到extension特性;网上查,按照proto-gen wiki上操作,不行。最后,就给pop_atry这哥们(中国人,好沟通)发邮件,原来这哥们wiki上的例子写错了,被坑了(开玩笑)。在这里,感谢pop_atry的回复。处理这个是问题有一段时间了,今天突然想到要写在blog上,让后来人得于立即解决这个问题,避免我当时解决问题的各种悲剧,浪费很多时间。

protobuf extension的使用方法请见:http://blog.csdn.net/herm_lib/article/details/7843560


定义的消息结构:

主文件 cs_msg.proto:

message MsgBody
{
    // [19000, 19999]是protobuf预留
    extensions 100 to max;  //  max is 2^29 - 1 tags分配规则见下面
}

另外一个文件cs_auth.proto:

import cs_msg.proto;
message SignReq
{
    required uint32 uid = 1;
}

extend MsgBody
{
    optional SignReq sign_req = 201;
}

序列化:

var mb:MsgBody = new MsgBody;
var singReq:SignReq = mb[SIGN_REQ];

反序列化

var mb:Msg = new MsgBody;
mb.MergeFrom(...);
void(SIGN_RES);   // 必须加一个这行
var singRes:SignRes = mb[SIGN_RES];

上面的void(SIGN_RES); 必须得加上,否则就会出现莫名其妙的解析结果。 这个用法很奇怪,我只用,但不知道什么原理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值