首先這裡需要宣傳一下,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中查看