summaryrefslogtreecommitdiff
path: root/src/network/network_query.cpp
diff options
context:
space:
mode:
authorPatric Stout <truebrain@openttd.org>2021-08-23 20:16:22 +0200
committerGitHub <noreply@github.com>2021-08-23 20:16:22 +0200
commitdc5b7b996c3f284d0e0f9f7685a8714f9d944ab6 (patch)
tree7ad640a29b092a11a85e31824c6f8e07481b5012 /src/network/network_query.cpp
parente31b5d387021c6d39b257840137c1f5da184d2cf (diff)
downloadopenttd-dc5b7b996c3f284d0e0f9f7685a8714f9d944ab6.tar.xz
Fix: [Network] show query errors in the server listing instead of error popup (#9506)
When you are query several servers at once, it is rather unclear for which server you got a popup. Instead, show any errors on the server itself. This is only true for the query-part. Joining a server still gives an error popup to tell you about any issue.
Diffstat (limited to 'src/network/network_query.cpp')
-rw-r--r--src/network/network_query.cpp40
1 files changed, 25 insertions, 15 deletions
diff --git a/src/network/network_query.cpp b/src/network/network_query.cpp
index f46a35df1..033c32e7c 100644
--- a/src/network/network_query.cpp
+++ b/src/network/network_query.cpp
@@ -77,16 +77,22 @@ NetworkRecvStatus QueryNetworkGameSocketHandler::SendGameInfo()
NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_FULL(Packet *p)
{
- /* We try to join a server which is full */
- ShowErrorMessage(STR_NETWORK_ERROR_SERVER_FULL, INVALID_STRING_ID, WL_CRITICAL);
- return NETWORK_RECV_STATUS_SERVER_FULL;
+ NetworkGameList *item = NetworkGameListAddItem(this->connection_string);
+ item->status = NGLS_FULL;
+
+ UpdateNetworkGameWindow();
+
+ return NETWORK_RECV_STATUS_CLOSE_QUERY;
}
NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_BANNED(Packet *p)
{
- /* We try to join a server where we are banned */
- ShowErrorMessage(STR_NETWORK_ERROR_SERVER_BANNED, INVALID_STRING_ID, WL_CRITICAL);
- return NETWORK_RECV_STATUS_SERVER_BANNED;
+ NetworkGameList *item = NetworkGameListAddItem(this->connection_string);
+ item->status = NGLS_BANNED;
+
+ UpdateNetworkGameWindow();
+
+ return NETWORK_RECV_STATUS_CLOSE_QUERY;
}
NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_GAME_INFO(Packet *p)
@@ -100,7 +106,7 @@ NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_GAME_INFO(Packet
/* Check for compatability with the client. */
CheckGameCompatibility(item->info);
/* Ensure we consider the server online. */
- item->online = true;
+ item->status = NGLS_ONLINE;
UpdateNetworkGameWindow();
@@ -111,17 +117,21 @@ NetworkRecvStatus QueryNetworkGameSocketHandler::Receive_SERVER_ERROR(Packet *p)
{
NetworkErrorCode error = (NetworkErrorCode)p->Recv_uint8();
- /* If we query a server that is 1.11.1 or older, we get an
- * NETWORK_ERROR_NOT_EXPECTED on requesting the game info. Show a special
- * error popup in that case.
- */
+ NetworkGameList *item = NetworkGameListAddItem(this->connection_string);
+
if (error == NETWORK_ERROR_NOT_EXPECTED) {
- ShowErrorMessage(STR_NETWORK_ERROR_SERVER_TOO_OLD, INVALID_STRING_ID, WL_CRITICAL);
- return NETWORK_RECV_STATUS_CLOSE_QUERY;
+ /* If we query a server that is 1.11.1 or older, we get an
+ * NETWORK_ERROR_NOT_EXPECTED on requesting the game info. Show to the
+ * user this server is too old to query.
+ */
+ item->status = NGLS_TOO_OLD;
+ } else {
+ item->status = NGLS_OFFLINE;
}
- ShowErrorMessage(STR_NETWORK_ERROR_LOSTCONNECTION, INVALID_STRING_ID, WL_CRITICAL);
- return NETWORK_RECV_STATUS_SERVER_ERROR;
+ UpdateNetworkGameWindow();
+
+ return NETWORK_RECV_STATUS_CLOSE_QUERY;
}
/**