lua protobuff 不支持嵌套修改protoc-gen-lua

发表于2018-09-18
评论0 4.1k浏览
protobuff解决方法如下:
找到文件src/google/protobuf/message.cc在文件的第一个#include之上的一行,加入  
#include<istream>  

继续运行make,即成功通过。
 
sudopythonsetup.pybuild
sudopythonsetup.pyinstall

erlang数据库编码中文返回是<<>>,需要使用unicode:characters_to_list(Username)  
数据库和erlang之间的编码统一使用utf8. 

luaprotobuff不支持嵌套修改protoc-gen-lua: 
1.  #lua('localprotobuf=require"protobuf"\n') 
替换成:  lua('localprotobuf=require"protobuf/protobuf"\n') 

2.  #type_name=env.get_ref_name(field_desc.type_name).upper().replace('.','_')  
替换成:  type_name=env.get_ref_name(field_desc.type_name).upper()#这一行

3.  #"local%s=protobuf.Descriptor();\n"%obj_name
替换成:  "%s=protobuf.Descriptor();\n"%obj_name#这一行去掉local

4.  #lua('local%s_pb=require("%s_pb")\n'%(i,i)) 
替换成:  lua('local%s_PB=require("%s_pb")\n'%(i.upper(),i))#这一行PB大写

使用指定--plugin=protoc-gen-lua:  
protoc --lua_out=./  --plugin=protoc-gen-lua="/Users/xinghua/Desktop/project_01_qipai/erlang_lua_probuff_ebin/protoc-gen-lua-master/plugin/protoc-gen-lua" *.proto

复合类型用法:  
lua:  
    local msg =  p_qipai_pb.createroom_s()
    msg.playerid = PlayerInfo:Instance().playerid
    msg.gameType = self.gameType
    msg.rule.lowsoces = 0    --rule是另外个message  
    msg.createtype = createType
    --发送
    self._NetHandler_CreateRoom = handler(self,self.NetCreateRoom)
    local pbdate = msg:SerializeToString()
    NetManager.SendNetMsg( ProtocID.Createroom_S    , pbdate, 
                           ProtocID.Createroom_R    , self._NetHandler_CreateRoom)
erlang:  
       {_,Playerid,GameType,Rule,Createtype} =  p_qipai_pb:decode_createroom_s(D),
       {_,LowSoces} = Rule
来自:https://blog.csdn.net/u010665359/article/details/72843364

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引