diff options
Diffstat (limited to 'services/console/lib/purk/scripts/timeout.py')
-rwxr-xr-x | services/console/lib/purk/scripts/timeout.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/services/console/lib/purk/scripts/timeout.py b/services/console/lib/purk/scripts/timeout.py new file mode 100755 index 0000000..2f0f585 --- /dev/null +++ b/services/console/lib/purk/scripts/timeout.py @@ -0,0 +1,45 @@ +import time + +import ui +from conf import conf + +def setupRaw(e): + e.network._message_timeout = False + +def onSocketConnect(e): + timeout = conf.get("server_traffic_timeout", 120)*1000 + e.network._message_timeout = False + if timeout: + e.network._message_timeout_source = ui.register_timer(timeout, check_timeout, e.network) + else: + e.network._message_timeout_source = None + +def check_timeout(network): + if network._message_timeout: + network.raw("PING %s" % network.me) + timeout = conf.get("server_death_timeout", 240)*1000 + network._message_timeout_source = ui.register_timer(timeout, check_death_timeout, network) + return False + else: + network._message_timeout = True + return True # call this function again + +def check_death_timeout(network): + if network._message_timeout: + network.raw("QUIT :Server missing, presumed dead") + network.disconnect(error="The server seems to have stopped talking to us") + else: + network._message_timeout = False + timeout = conf.get("server_traffic_timeout", 120)*1000 + if timeout: + network._message_timeout_source = ui.register_timer(timeout, check_timeout, network) + else: + network._message_timeout_source = None + +def onDisconnect(e): + try: + if e.network._message_timeout_source: + e.network._message_timeout_source.unregister() + e.network._message_timeout_source = None + except AttributeError: + pass |