summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2011-03-17 19:22:00 (GMT)
committerRemko Tronçon <git@el-tramo.be>2011-03-17 19:22:00 (GMT)
commit27b05c969f191bcce130c8bc171cca94d6b50b64 (patch)
tree23516c7afc901087df0a5b038290d9e5e64e3cf3
parent45b3444328fc495c4a5a7d05d3dcaa6116585e41 (diff)
downloadswift-contrib-27b05c969f191bcce130c8bc171cca94d6b50b64.zip
swift-contrib-27b05c969f191bcce130c8bc171cca94d6b50b64.tar.bz2
Sluift: Put a timeout on connecting to a server.
-rw-r--r--Sluift/sluift.cpp26
1 files changed, 20 insertions, 6 deletions
diff --git a/Sluift/sluift.cpp b/Sluift/sluift.cpp
index 0223556..458c44d 100644
--- a/Sluift/sluift.cpp
+++ b/Sluift/sluift.cpp
@@ -29,7 +29,8 @@ using namespace Swift;
* Forward declarations
******************************************************************************/
-bool debug = false;
+static bool debug = false;
+static int globalTimeout = 30000;
/*******************************************************************************
* Helper classes
@@ -68,9 +69,14 @@ class SluiftClient {
}
void waitConnected() {
- while (client->isActive() && !client->isAvailable()) {
+ Watchdog watchdog(globalTimeout, networkFactories.getTimerFactory());
+ while (!watchdog.getTimedOut() && client->isActive() && !client->isAvailable()) {
eventLoop.runUntilEvents();
}
+ if (watchdog.getTimedOut()) {
+ client->disconnect();
+ throw SluiftException("Timeout while connecting");
+ }
}
bool isConnected() const {
@@ -694,22 +700,30 @@ static int sluift_sleep(lua_State *L) {
}
static int sluift_index(lua_State *L) {
- luaL_checkstring(L, 2);
- if (std::string(lua_tostring(L, 2)) == "debug") {
+ std::string key(luaL_checkstring(L, 2));
+ if (key == "debug") {
lua_pushboolean(L, debug);
return 1;
}
+ else if (key == "timeout") {
+ lua_pushnumber(L, globalTimeout);
+ 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") {
+ std::string key(luaL_checkstring(L, 2));
+ if (key == "debug") {
debug = lua_toboolean(L, 3);
return 0;
}
+ else if (key == "timeout") {
+ globalTimeout = luaL_checknumber(L, 3);
+ return 0;
+ }
else {
return luaL_error(L, "Invalid index");
}