转载请注明: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];