Changeset - r25292:6323f849890a
[Not reviewed]
master
0 3 0
Patric Stout - 3 years ago 2021-04-26 18:02:58
truebrain@openttd.org
Codechange: refactor CheckGameCompatibility() from existing function

Later commits use this function in other places too.
3 files changed with 22 insertions and 8 deletions:
0 comments (0 inline, 0 general)
src/network/core/game_info.cpp
Show inline comments
 
@@ -107,6 +107,21 @@ bool IsNetworkCompatibleVersion(const ch
 
}
 

	
 
/**
 
 * Check if an game entry is compatible with our client.
 
 */
 
void CheckGameCompatibility(NetworkGameInfo &ngi)
 
{
 
	/* Check if we are allowed on this server based on the revision-check. */
 
	ngi.version_compatible = IsNetworkCompatibleVersion(ngi.server_revision);
 
	ngi.compatible = ngi.version_compatible;
 

	
 
	/* Check if we have all the GRFs on the client-system too. */
 
	for (const GRFConfig *c = ngi.grfconfig; c != nullptr; c = c->next) {
 
		if (c->status == GCS_NOT_FOUND) ngi.compatible = false;
 
	}
 
}
 

	
 
/**
 
 * Fill a NetworkGameInfo structure with the latest information of the server.
 
 * @param ngi the NetworkGameInfo struct to fill with data.
 
 */
src/network/core/game_info.h
Show inline comments
 
@@ -93,6 +93,7 @@ extern NetworkServerGameInfo _network_ga
 

	
 
const char *GetNetworkRevisionString();
 
bool IsNetworkCompatibleVersion(const char *other);
 
void CheckGameCompatibility(NetworkGameInfo &ngi);
 

	
 
void FillNetworkGameInfo(NetworkGameInfo &ngi);
 

	
src/network/network_udp.cpp
Show inline comments
 
@@ -324,10 +324,15 @@ void ClientNetworkUDPSocketHandler::Rece
 
	/* Find next item */
 
	item = NetworkGameListAddItem(*client_addr);
 

	
 
	/* Clear any existing GRFConfig chain. */
 
	ClearGRFConfigList(&item->info.grfconfig);
 
	/* Retrieve the NetworkGameInfo from the packet. */
 
	DeserializeNetworkGameInfo(p, &item->info);
 
	/* Check for compatability with the client. */
 
	CheckGameCompatibility(item->info);
 
	/* Ensure we consider the server online. */
 
	item->online = true;
 

	
 
	item->info.compatible = true;
 
	{
 
		/* Checks whether there needs to be a request for names of GRFs and makes
 
		 * the request if necessary. GRFs that need to be requested are the GRFs
 
@@ -341,7 +346,6 @@ void ClientNetworkUDPSocketHandler::Rece
 
		uint in_request_count = 0;
 

	
 
		for (c = item->info.grfconfig; c != nullptr; c = c->next) {
 
			if (c->status == GCS_NOT_FOUND) item->info.compatible = false;
 
			if (c->status != GCS_NOT_FOUND || strcmp(c->GetName(), UNKNOWN_GRF_NAME_PLACEHOLDER) != 0) continue;
 
			in_request[in_request_count] = c;
 
			in_request_count++;
 
@@ -369,12 +373,6 @@ void ClientNetworkUDPSocketHandler::Rece
 
		strecat(item->info.server_name, " (IPv6)", lastof(item->info.server_name));
 
	}
 

	
 
	/* Check if we are allowed on this server based on the revision-match */
 
	item->info.version_compatible = IsNetworkCompatibleVersion(item->info.server_revision);
 
	item->info.compatible &= item->info.version_compatible; // Already contains match for GRFs
 

	
 
	item->online = true;
 

	
 
	UpdateNetworkGameWindow();
 
}
 

	
0 comments (0 inline, 0 general)