首先這裡需要宣傳一下,qtun的網站已經開張了,功能正在逐步添加中。
一、嵌入lua的原因
由於qtun的可配置參數不斷增多,因此有必要將參數寫入到配置文件之中。又由於C語言並不擅長做字符串的處理,因此加入了輕量級的lua腳本語言,同時嵌入lua更有助於加入第三方插件的支持。
二、代碼的修改
int script_global_init(lua_State* lua)
{
load_lib(lua, "_G", luaopen_base);
load_lib(lua, LUA_TABLIBNAME, luaopen_table);
load_lib(lua, LUA_STRLIBNAME, luaopen_string);
load_lib(lua, LUA_IOLIBNAME, luaopen_io);
lua_pushcfunction(lua, _syslog);
lua_setglobal(lua, "_syslog");
init_qtun_state(lua);
init_qtun_conf(lua);
init_qtun_log(lua);
return 1;
}
從代碼中可知:qtun.state和qtun.conf通過metatable將C對象映射到lua中,qtun.log中只定義了log等級的常量int script_load_config(lua_State* lua, library_conf_t* conf, const char* file_path)
{
char path[MAX_PATH];
lua_pushlightuserdata(lua, conf);
lua_setglobal(lua, "__conf__");
strcpy(path, qtun->this_path);
strcat(path, "scripts/load_config.lua");
if (luaL_dofile(lua, path) != 0)
{
fprintf(stderr, "%s\n", lua_tostring(qtun->lua, -1));
lua_close(qtun->lua);
exit(1);
}
return 1;
}

三、lua腳本
最後讓我們來分別看一下這三個lua腳本長啥樣
四、完整代碼
完整代碼可到step14中查看