diff options
Diffstat (limited to 'src/network/network_client.cpp')
-rw-r--r-- | src/network/network_client.cpp | 62 |
1 files changed, 28 insertions, 34 deletions
diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 3a0f58b83..fd5ff79ec 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -643,42 +643,36 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CLIENT_INFO(Pac NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ERROR(Packet *p) { + static const StringID network_error_strings[] = { + STR_NETWORK_ERROR_LOSTCONNECTION, // NETWORK_ERROR_GENERAL + STR_NETWORK_ERROR_LOSTCONNECTION, // NETWORK_ERROR_DESYNC + STR_NETWORK_ERROR_LOSTCONNECTION, // NETWORK_ERROR_SAVEGAME_FAILED + STR_NETWORK_ERROR_LOSTCONNECTION, // NETWORK_ERROR_CONNECTION_LOST + STR_NETWORK_ERROR_LOSTCONNECTION, // NETWORK_ERROR_ILLEGAL_PACKET + STR_NETWORK_ERROR_LOSTCONNECTION, // NETWORK_ERROR_NEWGRF_MISMATCH + STR_NETWORK_ERROR_SERVER_ERROR, // NETWORK_ERROR_NOT_AUTHORIZED + STR_NETWORK_ERROR_SERVER_ERROR, // NETWORK_ERROR_NOT_EXPECTED + STR_NETWORK_ERROR_WRONG_REVISION, // NETWORK_ERROR_WRONG_REVISION + STR_NETWORK_ERROR_LOSTCONNECTION, // NETWORK_ERROR_NAME_IN_USE + STR_NETWORK_ERROR_WRONG_PASSWORD, // NETWORK_ERROR_WRONG_PASSWORD + STR_NETWORK_ERROR_SERVER_ERROR, // NETWORK_ERROR_COMPANY_MISMATCH + STR_NETWORK_ERROR_KICKED, // NETWORK_ERROR_KICKED + STR_NETWORK_ERROR_CHEATER, // NETWORK_ERROR_CHEATER + STR_NETWORK_ERROR_SERVER_FULL, // NETWORK_ERROR_FULL + STR_NETWORK_ERROR_TOO_MANY_COMMANDS, // NETWORK_ERROR_TOO_MANY_COMMANDS + STR_NETWORK_ERROR_TIMEOUT_PASSWORD, // NETWORK_ERROR_TIMEOUT_PASSWORD + STR_NETWORK_ERROR_TIMEOUT_COMPUTER, // NETWORK_ERROR_TIMEOUT_COMPUTER + STR_NETWORK_ERROR_TIMEOUT_MAP, // NETWORK_ERROR_TIMEOUT_MAP + STR_NETWORK_ERROR_TIMEOUT_JOIN, // NETWORK_ERROR_TIMEOUT_JOIN + }; + assert_compile(lengthof(network_error_strings) == NETWORK_ERROR_END); + NetworkErrorCode error = (NetworkErrorCode)p->Recv_uint8(); - switch (error) { - /* We made an error in the protocol, and our connection is closed.... */ - case NETWORK_ERROR_NOT_AUTHORIZED: - case NETWORK_ERROR_NOT_EXPECTED: - case NETWORK_ERROR_COMPANY_MISMATCH: - ShowErrorMessage(STR_NETWORK_ERROR_SERVER_ERROR, INVALID_STRING_ID, WL_CRITICAL); - break; - case NETWORK_ERROR_FULL: - ShowErrorMessage(STR_NETWORK_ERROR_SERVER_FULL, INVALID_STRING_ID, WL_CRITICAL); - break; - case NETWORK_ERROR_WRONG_REVISION: - ShowErrorMessage(STR_NETWORK_ERROR_WRONG_REVISION, INVALID_STRING_ID, WL_CRITICAL); - break; - case NETWORK_ERROR_WRONG_PASSWORD: - ShowErrorMessage(STR_NETWORK_ERROR_WRONG_PASSWORD, INVALID_STRING_ID, WL_CRITICAL); - break; - case NETWORK_ERROR_KICKED: - ShowErrorMessage(STR_NETWORK_ERROR_KICKED, INVALID_STRING_ID, WL_CRITICAL); - break; - case NETWORK_ERROR_CHEATER: - ShowErrorMessage(STR_NETWORK_ERROR_CHEATER, INVALID_STRING_ID, WL_CRITICAL); - break; - case NETWORK_ERROR_TOO_MANY_COMMANDS: - ShowErrorMessage(STR_NETWORK_ERROR_TOO_MANY_COMMANDS, INVALID_STRING_ID, WL_CRITICAL); - break; - case NETWORK_ERROR_TIMEOUT_PASSWORD: - ShowErrorMessage(STR_NETWORK_ERROR_TIMEOUT_PASSWORD, INVALID_STRING_ID, WL_CRITICAL); - break; - case NETWORK_ERROR_TIMEOUT_COMPUTER: - ShowErrorMessage(STR_NETWORK_ERROR_TIMEOUT_COMPUTER, INVALID_STRING_ID, WL_CRITICAL); - break; - default: - ShowErrorMessage(STR_NETWORK_ERROR_LOSTCONNECTION, INVALID_STRING_ID, WL_CRITICAL); - } + StringID err = STR_NETWORK_ERROR_LOSTCONNECTION; + if (error < (ptrdiff_t)lengthof(network_error_strings)) err = network_error_strings[error]; + + ShowErrorMessage(err, INVALID_STRING_ID, WL_CRITICAL); DeleteWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_JOIN); |