From 15463a851ab3d66a5fa6c537c8359cdcf68b56ca Mon Sep 17 00:00:00 2001 From: "A. Svensson" Date: Mon, 6 Apr 2015 13:02:04 +0200 Subject: [PATCH] Failure to poll a servers means we treat it like it's offline. --- src/gameservers/data_sources.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/gameservers/data_sources.py b/src/gameservers/data_sources.py index 051ae36..4b56551 100644 --- a/src/gameservers/data_sources.py +++ b/src/gameservers/data_sources.py @@ -24,16 +24,17 @@ def poll_ss13_server(server, timeout=30): sock.sendall(query) response = sock.recv(1024) sock.close() - assert(len(response) > 0) + assert(len(response) >= 9) assert(response[:5] == '\x00\x83\x00\x05\x2a') - tmp = struct.unpack('f', response[5:9]) - return int(tmp[0]), server + players = int(struct.unpack('f', response[5:9])[0]) + assert(players >= 0) + return players, server except (socket.timeout, AssertionError) as e: try: sock.close() except UnboundLocalError: pass - return 0, server + return -1, server class ServerPoller(object): @@ -69,6 +70,10 @@ class ServerPoller(object): def _handle_future(self, future): players, server = future.get() + if players == -1: + # Couldn't get a proper update from the server when polling it, + # consider it offline for now + return server = dict( title = server.title, game_url = 'byond://{}:{}'.format(server.host, server.port),