Added translation support for server orders.

This commit is contained in:
Matthias Mailänder
2021-12-18 20:12:28 +01:00
committed by teinarss
parent ee95d2591f
commit 0260884369
19 changed files with 834 additions and 149 deletions

View File

@@ -30,11 +30,24 @@ namespace OpenRA.Mods.Common.Server
// 1 second (in milliseconds) minimum delay between pings
const int RateLimitInterval = 1000;
[TranslationReference]
static readonly string NoPortForward = "no-port-forward";
[TranslationReference]
static readonly string BlacklistedTitle = "blacklisted-title";
[TranslationReference]
static readonly string InvalidErrorCode = "invalid-error-code";
[TranslationReference]
static readonly string Connected = "master-server-connected";
[TranslationReference]
static readonly string Error = "master-server-error";
[TranslationReference]
static readonly string GameOffline = "game-offline";
static readonly Beacon LanGameBeacon;
static readonly Dictionary<int, string> MasterServerErrors = new Dictionary<int, string>()
{
{ 1, "Server port is not accessible from the internet." },
{ 2, "Server name contains a blacklisted word." }
{ 1, NoPortForward },
{ 2, BlacklistedTitle }
};
long lastPing = 0;
@@ -143,25 +156,25 @@ namespace OpenRA.Mods.Common.Server
var regex = new Regex(@"^\[(?<code>-?\d+)\](?<message>.*)");
var match = regex.Match(masterResponseText);
errorMessage = match.Success && int.TryParse(match.Groups["code"].Value, out errorCode) ?
match.Groups["message"].Value.Trim() : "Failed to parse error message";
match.Groups["message"].Value.Trim() : InvalidErrorCode;
}
isInitialPing = false;
lock (masterServerMessages)
{
masterServerMessages.Enqueue("Master server communication established.");
masterServerMessages.Enqueue(Connected);
if (errorCode != 0)
{
// Hardcoded error messages take precedence over the server-provided messages
if (!MasterServerErrors.TryGetValue(errorCode, out var message))
message = errorMessage;
masterServerMessages.Enqueue("Warning: " + message);
masterServerMessages.Enqueue(message);
// Positive error codes indicate errors that prevent advertisement
// Negative error codes are non-fatal warnings
if (errorCode > 0)
masterServerMessages.Enqueue("Game has not been advertised online.");
masterServerMessages.Enqueue(GameOffline);
}
}
}
@@ -170,7 +183,7 @@ namespace OpenRA.Mods.Common.Server
{
Log.Write("server", ex.ToString());
lock (masterServerMessages)
masterServerMessages.Enqueue("Master server communication failed.");
masterServerMessages.Enqueue(Error);
}
isBusy = false;