Small fixes

- Sometimes the game sends port 0 as the port to forward to. Obviously
this isn't right, so *try* to match up the server with something, even
if it may or may not be right. Hopefully it's right.
- Tried to fix friends games in some games. Metroid Prime: Hunters seems
to look for the dwc_pid for a friend, and sometimes the friend never
does a statechanged, so assume that any state except 2 should be added
to the server list.
This commit is contained in:
polaris
2014-05-22 08:49:14 -04:00
parent 7aeac3c525
commit 7379dc2a7a
2 changed files with 8 additions and 8 deletions

View File

@@ -388,11 +388,11 @@ class GameSpyBackendServer(object):
# Search all servers
for gameid in self.server_list:
for server in self.server_list[gameid]:
if server['publicip'] == ip and server['publicport'] == str(port):
if server['publicip'] == ip and (port == 0 or server['publicport'] == str(port)):
return server
else:
for server in self.server_list[gameid]:
if server['publicip'] == ip and server['publicport'] == str(port):
if server['publicip'] == ip and (port == 0 or server['publicport'] == str(port)):
return server
return None

View File

@@ -260,7 +260,12 @@ class GameSpyQRServer(object):
k['publicip'] = str(ctypes.c_int32(utils.get_int(bytearray([int(x) for x in address[0].split('.')]), 0)).value) # DS
if "statechanged" in k:
if k['statechanged'] == "1": # Create server
if k['statechanged'] == "2": # Close server
self.server_manager.delete_server(k['gamename'] , session_id)
if session_id in self.sessions:
self.sessions.pop(session_id)
else: #if k['statechanged'] == "1": # Create server
#if k['publicport'] != "0" and k['publicip'] != "0":
# dwc_mtype controls what kind of server query we're looking for.
# dwc_mtype = 0 is used when looking for a matchmaking game.
@@ -273,11 +278,6 @@ class GameSpyQRServer(object):
if session_id in self.sessions:
self.sessions[session_id].gamename = k['gamename']
elif k['statechanged'] == "2": # Close server
self.server_manager.delete_server(k['gamename'] , session_id)
if session_id in self.sessions:
self.sessions.pop(session_id)
elif recv_data[0] == '\x04': # Add Error