summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Sluift/client_test.lua2
-rw-r--r--Sluift/sluift.cpp48
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);