lua protobuff 不支持嵌套修改protoc-gen-lua(记录)

时间:2021-01-30 15:42:36
protobuff解决方法如下:


找到文件src/google/protobuf/message.cc     在文件的第一个#include之上的一行,加入 


#include <istream>


继续运行make ,即成功通过。


sudo python setup.py build
sudo python setup.py install


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


lua protobuff 不支持嵌套修改protoc-gen-lua :
1.  
# lua('local protobuf = require "protobuf"\n')
替换成:
        lua('local protobuf = 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