diff options
author | Remko Tronçon <git@el-tramo.be> | 2011-03-04 19:36:44 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2011-03-04 19:36:44 (GMT) |
commit | f310de4bc115a724b0e9de520707607095f6b16e (patch) | |
tree | 322f72aa173b0d07337419056e14d605827ff2cd | |
parent | 3b1d44842367b730688ee3a2069a25912cd2721e (diff) | |
download | swift-contrib-f310de4bc115a724b0e9de520707607095f6b16e.zip swift-contrib-f310de4bc115a724b0e9de520707607095f6b16e.tar.bz2 |
Sluift: Spin the event loop on some commands
-rw-r--r-- | Sluift/sluift.cpp | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/Sluift/sluift.cpp b/Sluift/sluift.cpp index 324c94e..5750dd2 100644 --- a/Sluift/sluift.cpp +++ b/Sluift/sluift.cpp @@ -224,22 +224,31 @@ static int sluift_client_disconnect(lua_State *L) { } static int sluift_client_set_version(lua_State *L) { - SluiftClient* client = getClient(L); - luaL_checktype(L, 2, LUA_TTABLE); - lua_getfield(L, 2, "name"); - const char* rawName = lua_tostring(L, -1); - lua_getfield(L, 2, "version"); - const char* rawVersion = lua_tostring(L, -1); - lua_getfield(L, 2, "os"); - const char* rawOS = lua_tostring(L, -1); - client->setSoftwareVersion(rawName ? rawName : "", rawVersion ? rawVersion : "", rawOS ? rawOS : ""); - lua_pop(L, 3); - lua_pushvalue(L, 1); - return 1; + try { + eventLoop.runUntilEvents(); + + SluiftClient* client = getClient(L); + luaL_checktype(L, 2, LUA_TTABLE); + lua_getfield(L, 2, "name"); + const char* rawName = lua_tostring(L, -1); + lua_getfield(L, 2, "version"); + const char* rawVersion = lua_tostring(L, -1); + lua_getfield(L, 2, "os"); + const char* rawOS = lua_tostring(L, -1); + client->setSoftwareVersion(rawName ? rawName : "", rawVersion ? rawVersion : "", rawOS ? rawOS : ""); + lua_pop(L, 3); + lua_pushvalue(L, 1); + return 1; + } + catch (const SluiftException& e) { + return luaL_error(L, e.getReason().c_str()); + } } static int sluift_client_get_roster(lua_State *L) { try { + eventLoop.runUntilEvents(); + SluiftClient* client = getClient(L); Lua::Table rosterTable; foreach(const XMPPRosterItem& item, client->getRoster()) { |