mirror of
https://github.com/barronwaffles/dwc_network_server_emulator.git
synced 2026-08-27 21:34:08 -05:00
More matchmaking bugfix attempts
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user