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