diff options
| author | Remko Tronçon <git@el-tramo.be> | 2011-02-25 19:32:19 (GMT) | 
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2011-02-25 19:32:19 (GMT) | 
| commit | 707eae7dafbbe0625e2392d19072ff6d3be2c14a (patch) | |
| tree | 61e3079be09e4735cedbb26c3e593adeca43e5b9 | |
| parent | 258232604c0f84a5edb95d7d74b65326a57a3398 (diff) | |
| download | swift-contrib-707eae7dafbbe0625e2392d19072ff6d3be2c14a.zip swift-contrib-707eae7dafbbe0625e2392d19072ff6d3be2c14a.tar.bz2  | |
Use package event for handling Sluift debug flag.
| -rw-r--r-- | Sluift/client_test.lua | 2 | ||||
| -rw-r--r-- | Sluift/sluift.cpp | 48 | 
2 files changed, 32 insertions, 18 deletions
diff --git a/Sluift/client_test.lua b/Sluift/client_test.lua index afb8147..4eebf0c 100644 --- a/Sluift/client_test.lua +++ b/Sluift/client_test.lua @@ -1,6 +1,6 @@  require "sluift" ---sluift.debug = true +-- sluift.debug = true  client1_jid = os.getenv("SWIFT_CLIENTTEST_JID") .. "/Client1"  client2_jid = os.getenv("SWIFT_CLIENTTEST_JID") .. "/Client2"  password = os.getenv("SWIFT_CLIENTTEST_PASS") diff --git a/Sluift/sluift.cpp b/Sluift/sluift.cpp index 895d90d..84643b8 100644 --- a/Sluift/sluift.cpp +++ b/Sluift/sluift.cpp @@ -30,15 +30,7 @@ using namespace Swift;   * Forward declarations   ******************************************************************************/ -static int debugRef = 0; - -static bool debug(lua_State* L) { -	lua_rawgeti(L, LUA_REGISTRYINDEX, debugRef); -	lua_getfield(L, -1, "debug"); -	bool b = lua_toboolean(L, -1); -	lua_pop(L, 2); -	return b; -} +bool debug = false;  /*******************************************************************************   * Helper classes @@ -49,7 +41,7 @@ BoostNetworkFactories networkFactories(&eventLoop);  class SluiftClient {  	public: -		SluiftClient(const JID& jid, const std::string& password, bool debug = false) : tracer(NULL) { +		SluiftClient(const JID& jid, const std::string& password) : tracer(NULL) {  			client = new Client(jid, password, &networkFactories);  			client->setAlwaysTrustCertificates();  			client->onMessageReceived.connect(boost::bind(&SluiftClient::handleIncomingEvent, this, _1)); @@ -309,7 +301,7 @@ static int sluift_connect(lua_State *L) {  	luaL_getmetatable(L, SLUIFT_CLIENT);  	lua_setmetatable(L, -2); -	*client = new SluiftClient(jid, password, debug(L)); +	*client = new SluiftClient(jid, password);  	(*client)->connect();  	if (!(*client)->isConnected()) {  		lua_pushnil(L); @@ -317,6 +309,28 @@ static int sluift_connect(lua_State *L) {  	return 1;  } +static int sluift_index(lua_State *L) { +	luaL_checkstring(L, 2); +	if (std::string(lua_tostring(L, 2)) == "debug") { +		lua_pushboolean(L, debug); +		return 1; +	} +	else { +		return luaL_error(L, "Invalid index"); +	} +} + +static int sluift_newindex(lua_State *L) { +	luaL_checkstring(L, 2); +	if (std::string(lua_tostring(L, 2)) == "debug") { +		debug = lua_toboolean(L, 3); +		return 0; +	} +	else { +		return luaL_error(L, "Invalid index"); +	} +} +  static const luaL_reg sluift_functions[] = {  	{"connect",   sluift_connect},  	{NULL, NULL} @@ -330,12 +344,12 @@ static const luaL_reg sluift_functions[] = {  SLUIFT_API int luaopen_sluift(lua_State *L) {  	// Register functions  	luaL_register(L, "sluift", sluift_functions); -	lua_pushboolean(L, false); -	lua_setfield(L, -2, "debug"); -	 -	lua_pushvalue(L, -1); -	debugRef = luaL_ref(L, LUA_REGISTRYINDEX); - +	lua_createtable(L, 0, 0); +	lua_pushcclosure(L, sluift_index, 0); +	lua_setfield(L, -2, "__index"); +	lua_pushcclosure(L, sluift_newindex, 0); +	lua_setfield(L, -2, "__newindex"); +	lua_setmetatable(L, -2);  	// Register the client metatable  	luaL_newmetatable(L, SLUIFT_CLIENT);  | 
 Swift