More matchmaking bugfix attempts

This commit is contained in:
polaris
2014-08-05 08:32:55 -04:00
parent 79d40b0561
commit 174c643d35
3 changed files with 33 additions and 16 deletions

View File

@@ -436,17 +436,32 @@ class GameSpyBackendServer(object):
localip_int_be = localaddr[3]
def find_server(gameid):
best_match = None
for server in self.server_list[gameid]:
logger.log(logging.DEBUG, "publicip: %s == %s ? %d localport: %s == %s ? %d" % (server['publicip'], publicip, server['publicip'] == publicip, server['localport'], str(localport), server['localport'] == str(localport)))
if server['publicip'] == publicip and server['localport'] == str(localport):
# for x in range(0, 10):
# s = 'localip%d' % x
# if s in server:
# if server[s] == localip:
# return server
return server
if server['publicip'] == publicip:
if server['localport'] == str(localport):
best_match = server
break
logger.log(logging.DEBUG, "Couldn't find a match for %s" % (publicip))
for x in range(0, 10):
s = 'localip%d' % x
if s in server:
if server[s] == localip:
best_match = server
if localport == 0 and best_match == None:
# Kinda hackish. This sometimes happens.
# Assuming two clients aren't trying to connect from the same IP, this might be safe.
# The server wasn't verified to be the *correct* server, but it's on the same IP so it
# has a chance of being correct. At least make an attempt to establish the connection.
best_match = server
if best_match == None:
logger.log(logging.DEBUG, "Couldn't find a match for %s" % (publicip))
return best_match
if gameid == None:
# Search all servers

View File

@@ -170,7 +170,7 @@ class GameSpyNatNegServer(object):
#if self.session_list[session_id][client_id]['serveraddr'] == None:
serveraddr = self.get_server_info(gameid, session_id, client_id)
if serveraddr == None:
serveraddr = self.get_server_info_alt(gameid, session_id, client)
serveraddr = self.get_server_info_alt(gameid, session_id, client_id)
self.session_list[session_id][client_id]['serveraddr'] = serveraddr
logger.log(logging.DEBUG, "Found server 2 from local ip/port: %s from %d" % (serveraddr, session_id))

View File

@@ -326,10 +326,12 @@ class GameSpyQRServer(object):
if "statechanged" in k:
if k['statechanged'] == "2": # Close server
self.server_manager.delete_server(k['gamename'] , session_id)
self.server_manager.delete_server(k['gamename'] , session_id)
if session_id in self.sessions:
# self.sessions[session_id].disconnected = True
del self.sessions[session_id]
if session_id in self.sessions:
self.sessions[session_id].disconnected = True
else: #if k['statechanged'] == "1": # Create server
#if k['publicport'] != "0" and k['publicip'] != "0":
@@ -379,16 +381,16 @@ class GameSpyQRServer(object):
#self.log(logging.DEBUG, None, "Keep alive check on %d sessions" % (len(self.sessions)))
pruned = []
now = int(time.time())
for session_id in self.sessions:
now = int(time.time())
delta = now - self.sessions[session_id].keepalive
# timeout = 60 * 5 # Remove clients that haven't responded in x seconds
timeout = 30 # Remove clients that haven't responded in x seconds
timeout = 60 * 5 # Remove clients that haven't responded in x seconds
if delta < 0 or delta >= timeout:
pruned.append(session_id)
self.server_manager.delete_server(self.sessions[session_id].gamename, self.sessions[session_id].session)
self.log(logging.DEBUG, None, "Keep alive check removed %s:%s for game %s" % (self.sessions[session_id].address[0], self.sessions[session_id].address[1], self.sessions[session_id].gamename))
self.log(logging.DEBUG, None, "Keep alive check removed %s:%s for game %s. Client hasn't responded in %d seconds." % (self.sessions[session_id].address[0], self.sessions[session_id].address[1], self.sessions[session_id].gamename, delta))
for session_id in pruned:
del self.sessions[session_id]