summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lang/english.txt1
-rw-r--r--src/network/network.cpp25
-rw-r--r--src/network/network_func.h1
-rw-r--r--src/network/network_gui.cpp21
-rw-r--r--src/table/settings.ini1
5 files changed, 36 insertions, 13 deletions
diff --git a/src/lang/english.txt b/src/lang/english.txt
index db74c230b..4a92eba89 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -2204,6 +2204,7 @@ STR_NETWORK_ERROR_CLIENT_START :{WHITE}Could no
STR_NETWORK_ERROR_TIMEOUT :{WHITE}Connection #{NUM} timed out
STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}A protocol error was detected and the connection was closed
STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Your player name has not been set. The name can be set at the top of the Multiplayer window
+STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Your server name has not been set. The name can be set at the top of the Multiplayer window
STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}The revision of this client does not match the server's revision
STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Wrong password
STR_NETWORK_ERROR_SERVER_FULL :{WHITE}The server is full
diff --git a/src/network/network.cpp b/src/network/network.cpp
index 53ef645d7..94a5539f0 100644
--- a/src/network/network.cpp
+++ b/src/network/network.cpp
@@ -835,10 +835,6 @@ void NetworkClientJoinGame()
static void NetworkInitGameInfo()
{
- if (_settings_client.network.server_name.empty()) {
- _settings_client.network.server_name = "Unnamed Server";
- }
-
FillStaticNetworkServerGameInfo();
/* The server is a client too */
_network_game_info.clients_on = _network_dedicated ? 0 : 1;
@@ -852,6 +848,25 @@ static void NetworkInitGameInfo()
}
/**
+ * Trim the given server name in place, i.e. remove leading and trailing spaces.
+ * After the trim check whether the server name is not empty.
+ * When the server name is empty a GUI error message is shown telling the
+ * user to set the servername and this function returns false.
+ *
+ * @param server_name The server name to validate. It will be trimmed of leading
+ * and trailing spaces.
+ * @return True iff the server name is valid.
+ */
+bool NetworkValidateServerName(std::string &server_name)
+{
+ StrTrimInPlace(server_name);
+ if (!server_name.empty()) return true;
+
+ ShowErrorMessage(STR_NETWORK_ERROR_BAD_SERVER_NAME, INVALID_STRING_ID, WL_ERROR);
+ return false;
+}
+
+/**
* Check whether the client and server name are set, for a dedicated server and if not set them to some default
* value and tell the user to change this as soon as possible.
* If the saved name is the default value, then the user is told to override this value too.
@@ -860,12 +875,14 @@ static void NetworkInitGameInfo()
static void CheckClientAndServerName()
{
static const std::string fallback_client_name = "Unnamed Client";
+ StrTrimInPlace(_settings_client.network.client_name);
if (_settings_client.network.client_name.empty() || _settings_client.network.client_name.compare(fallback_client_name) == 0) {
DEBUG(net, 1, "No \"client_name\" has been set, using \"%s\" instead. Please set this now using the \"name <new name>\" command", fallback_client_name.c_str());
_settings_client.network.client_name = fallback_client_name;
}
static const std::string fallback_server_name = "Unnamed Server";
+ StrTrimInPlace(_settings_client.network.server_name);
if (_settings_client.network.server_name.empty() || _settings_client.network.server_name.compare(fallback_server_name) == 0) {
DEBUG(net, 1, "No \"server_name\" has been set, using \"%s\" instead. Please set this now using the \"server_name <new name>\" command", fallback_server_name.c_str());
_settings_client.network.server_name = fallback_server_name;
diff --git a/src/network/network_func.h b/src/network/network_func.h
index fbae8daf7..d30616fd0 100644
--- a/src/network/network_func.h
+++ b/src/network/network_func.h
@@ -38,6 +38,7 @@ byte NetworkSpectatorCount();
bool NetworkIsValidClientName(const std::string_view client_name);
bool NetworkValidateClientName();
bool NetworkValidateClientName(std::string &client_name);
+bool NetworkValidateServerName(std::string &server_name);
void NetworkUpdateClientName(const std::string &client_name);
bool NetworkCompanyHasClients(CompanyID company);
std::string NetworkChangeCompanyPassword(CompanyID company_id, std::string password);
diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp
index 6df77cd08..d06ff27be 100644
--- a/src/network/network_gui.cpp
+++ b/src/network/network_gui.cpp
@@ -1095,6 +1095,7 @@ struct NetworkStartServerWindow : public Window {
break;
case WID_NSS_GENERATE_GAME: // Start game
+ if (!CheckServerName()) return;
_is_network_server = true;
if (_ctrl_pressed) {
StartNewGameWithoutGUI(GENERATE_NEW_SEED);
@@ -1104,16 +1105,19 @@ struct NetworkStartServerWindow : public Window {
break;
case WID_NSS_LOAD_GAME:
+ if (!CheckServerName()) return;
_is_network_server = true;
ShowSaveLoadDialog(FT_SAVEGAME, SLO_LOAD);
break;
case WID_NSS_PLAY_SCENARIO:
+ if (!CheckServerName()) return;
_is_network_server = true;
ShowSaveLoadDialog(FT_SCENARIO, SLO_LOAD);
break;
case WID_NSS_PLAY_HEIGHTMAP:
+ if (!CheckServerName()) return;
_is_network_server = true;
ShowSaveLoadDialog(FT_HEIGHTMAP,SLO_LOAD);
break;
@@ -1133,11 +1137,13 @@ struct NetworkStartServerWindow : public Window {
this->SetDirty();
}
- void OnEditboxChanged(int wid) override
+ bool CheckServerName()
{
- if (wid == WID_NSS_GAMENAME) {
- _settings_client.network.server_name = this->name_editbox.text.buf;
- }
+ std::string str = this->name_editbox.text.buf;
+ if (!NetworkValidateServerName(str)) return false;
+
+ SetSettingValue(GetSettingFromName("network.server_name")->AsStringSetting(), str);
+ return true;
}
void OnTimeout() override
@@ -2199,16 +2205,13 @@ public:
case WID_CL_SERVER_NAME_EDIT: {
if (!_network_server) break;
- SetSettingValue(GetSettingFromName("network.server_name")->AsStringSetting(), StrEmpty(str) ? "Unnamed Server" : str);
+ SetSettingValue(GetSettingFromName("network.server_name")->AsStringSetting(), str);
this->InvalidateData();
break;
}
case WID_CL_CLIENT_NAME_EDIT: {
- std::string client_name(str);
- if (!NetworkValidateClientName(client_name)) break;
-
- SetSettingValue(GetSettingFromName("network.client_name")->AsStringSetting(), client_name);
+ SetSettingValue(GetSettingFromName("network.client_name")->AsStringSetting(), str);
this->InvalidateData();
break;
}
diff --git a/src/table/settings.ini b/src/table/settings.ini
index 2b6187087..6a2cb5b14 100644
--- a/src/table/settings.ini
+++ b/src/table/settings.ini
@@ -3959,6 +3959,7 @@ length = NETWORK_NAME_LENGTH
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
guiflags = SGF_NETWORK_ONLY
def = nullptr
+pre_cb = NetworkValidateServerName
post_cb = [](auto) { UpdateClientConfigValues(); }
cat = SC_BASIC