implement feedback from issue #91 when sv_running is off
clean up a trying to abort thread which doesn't actually work with .net core don't log event tasks cancelled as error, because it's not
This commit is contained in:
parent
639db5d7eb
commit
cd387ca08b
@ -835,6 +835,7 @@ namespace IW4MAdmin
|
||||
Logger.WriteDebug(e.GetExceptionInfo());
|
||||
}
|
||||
|
||||
Logger.WriteError(e.Message);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -876,6 +877,13 @@ namespace IW4MAdmin
|
||||
Version = RconParser.Version;
|
||||
}
|
||||
|
||||
var svRunning = await this.GetDvarAsync<int>("sv_running");
|
||||
|
||||
if (svRunning.Value == 0)
|
||||
{
|
||||
throw new ServerException(loc["SERVER_ERROR_NOT_RUNNING"]);
|
||||
}
|
||||
|
||||
var infoResponse = RconParser.Configuration.CommandPrefixes.RConGetInfo != null ? await this.GetInfoAsync() : null;
|
||||
// this is normally slow, but I'm only doing it because different games have different prefixes
|
||||
var hostname = infoResponse == null ?
|
||||
|
@ -130,7 +130,6 @@ namespace IW4MAdmin.Application
|
||||
};
|
||||
|
||||
await Task.WhenAll(tasks);
|
||||
inputThread.Abort();
|
||||
|
||||
ServerManager.Logger.WriteVerbose(Utilities.CurrentLocalization.LocalizationIndex["MANAGER_SHUTDOWN_SUCCESS"]);
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ namespace IW4MAdmin.Application.RconParsers
|
||||
RConGetInfo = "ÿÿÿÿgetinfo",
|
||||
RConResponse = "ÿÿÿÿprint",
|
||||
},
|
||||
ServerNotRunningResponse = "Server is not running."
|
||||
};
|
||||
|
||||
Configuration.Status.Pattern = @"^ *([0-9]+) +-?([0-9]+) +((?:[A-Z]+|[0-9]+)) +((?:[a-z]|[0-9]){8,32}|(?:[a-z]|[0-9]){8,32}|bot[0-9]+|(?:[0-9]+)) *(.{0,32}) +([0-9]+) +(\d+\.\d+\.\d+.\d+\:-*\d{1,5}|0+.0+:-*\d{1,5}|loopback|unknown) +(-*[0-9]+) +([0-9]+) *$";
|
||||
@ -141,7 +142,7 @@ namespace IW4MAdmin.Application.RconParsers
|
||||
|
||||
if (Status.Length < 4)
|
||||
{
|
||||
throw new ServerException("Unexpected status response received");
|
||||
throw new ServerException(Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_UNEXPECTED_STATUS"]);
|
||||
}
|
||||
|
||||
int validMatches = 0;
|
||||
@ -208,7 +209,7 @@ namespace IW4MAdmin.Application.RconParsers
|
||||
// this happens if status is requested while map is rotating
|
||||
if (Status.Length > 5 && validMatches == 0)
|
||||
{
|
||||
throw new ServerException("Server is rotating map");
|
||||
throw new ServerException(Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_ROTATING_MAP"]);
|
||||
}
|
||||
|
||||
return StatusPlayers;
|
||||
|
@ -1,5 +1,4 @@
|
||||
using SharedLibraryCore;
|
||||
using SharedLibraryCore.Interfaces;
|
||||
using SharedLibraryCore.Interfaces;
|
||||
using SharedLibraryCore.RCon;
|
||||
|
||||
namespace IW4MAdmin.Application.RconParsers
|
||||
@ -14,6 +13,7 @@ namespace IW4MAdmin.Application.RconParsers
|
||||
public ParserRegex Status { get; set; } = new ParserRegex();
|
||||
public ParserRegex MapStatus { get; set; } = new ParserRegex();
|
||||
public ParserRegex Dvar { get; set; } = new ParserRegex();
|
||||
public string ServerNotRunningResponse { get; set; }
|
||||
public bool WaitForResponse { get; set; } = true;
|
||||
}
|
||||
}
|
||||
|
@ -257,13 +257,16 @@ namespace SharedLibraryCore
|
||||
{
|
||||
processed = await Task.Run(() => _eventFinishedWaiter.WaitOne(timeSpan), token);
|
||||
}
|
||||
catch { }
|
||||
|
||||
catch (TaskCanceledException)
|
||||
{
|
||||
processed = true;
|
||||
}
|
||||
|
||||
if (!processed)
|
||||
{
|
||||
#if DEBUG
|
||||
//throw new Exception();
|
||||
throw new Exception();
|
||||
#endif
|
||||
Owner?.Logger.WriteError("Waiting for event to complete timed out");
|
||||
Owner?.Logger.WriteDebug($"{Id}, {Type}, {Data}, {Extra}, {FailReason.ToString()}, {Message}, {Origin}, {Target}");
|
||||
|
@ -24,6 +24,11 @@ namespace SharedLibraryCore.Interfaces
|
||||
/// </summary>
|
||||
ParserRegex Dvar { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Specifies the expected response message from rcon when the server is not running
|
||||
/// </summary>
|
||||
string ServerNotRunningResponse { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// indicates if the application should wait for response from server
|
||||
/// when executing a command
|
||||
|
@ -184,16 +184,22 @@ namespace SharedLibraryCore.RCon
|
||||
|
||||
string responseString = defaultEncoding.GetString(response, 0, response.Length) + '\n';
|
||||
|
||||
// note: not all games respond if the pasword is wrong or not set
|
||||
if (responseString.Contains("Invalid password") || responseString.Contains("rconpassword"))
|
||||
{
|
||||
throw new NetworkException(Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_RCON_INVALID"]);
|
||||
}
|
||||
|
||||
if (responseString.ToString().Contains("rcon_password"))
|
||||
if (responseString.Contains("rcon_password"))
|
||||
{
|
||||
throw new NetworkException(Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_RCON_NOTSET"]);
|
||||
}
|
||||
|
||||
if (responseString.Contains(Config.ServerNotRunningResponse))
|
||||
{
|
||||
throw new ServerException(Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_NOT_RUNNING"].FormatExt(Endpoint.ToString()));
|
||||
}
|
||||
|
||||
string[] splitResponse = responseString.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries)
|
||||
.Select(line => line.Trim())
|
||||
.ToArray();
|
||||
|
Loading…
Reference in New Issue
Block a user