NO IMAGE

今天重灌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