今天重装quick-cocos, 因为项目要运用protobuf协议,所以将云风的pbc源码下载下来编译进player内,以前集成protobuf到quick-cocos操作过不少,但一直有个关于pbc下的protobuf.lua文件的register()参数问题没有细究,今天借以闲暇终于探了个究竟:
protobuf.lua文件的register()方法(lua):
function register( buffer)
c._env_register(P, buffer)
end
c._env_register(P, buffer)的实现(c代码):
_env_register(lua_State *L) {
struct pbc_env * env = (struct pbc_env *)checkuserdata(L,1);
size_t sz = 0;
const char * buffer = luaL_checklstring(L, 2 , &sz);
struct pbc_slice slice;
slice.buffer = (void *)buffer;
slice.len = (int)sz;
int ret = pbc_register(env, &slice);
if (ret) {
return luaL_error(L, "register fail");
}
return 0;
}
rester该方法仅需传入一个参数buffer,buffer为需要注册的.pb文件数据,从_env_register我们可以看出它需要的数据类型为const char* 类型,因.pb文件为二进制格式文件,所以我们读取.pb文件数据时需要要以二进制编码格式去读:
local protobuf = require "protobuf"
local f = io.open(pb_path, "rb")
if f then
local buff = f:read("*a")
protobuf.register(buff)
f:close()
end