mirror of
https://github.com/tribufu/ServerManagers
synced 2026-05-06 15:17:34 +00:00
Finished the remaing bot commands
This commit is contained in:
parent
0f3c6e6be9
commit
aa62646f0f
23 changed files with 1041 additions and 287 deletions
|
|
@ -114,7 +114,7 @@ namespace ServerManagerTool.Lib
|
|||
_startTime = DateTime.Now;
|
||||
}
|
||||
|
||||
private void BackupServer()
|
||||
private void BackupServer(CancellationToken cancellationToken)
|
||||
{
|
||||
if (_profile == null || _profile.SotFEnabled)
|
||||
{
|
||||
|
|
@ -142,65 +142,65 @@ namespace ServerManagerTool.Lib
|
|||
|
||||
if (_serverRunning)
|
||||
{
|
||||
// check if RCON is enabled
|
||||
if (_profile.RCONEnabled)
|
||||
try
|
||||
{
|
||||
try
|
||||
emailMessage.AppendLine();
|
||||
|
||||
var sent = false;
|
||||
|
||||
// perform a world save
|
||||
if (!string.IsNullOrWhiteSpace(Config.Default.ServerBackup_WorldSaveMessage))
|
||||
{
|
||||
try
|
||||
ProcessAlert(AlertType.Backup, Config.Default.ServerBackup_WorldSaveMessage);
|
||||
sent = SendMessageAsync(Config.Default.ServerBackup_WorldSaveMessage, cancellationToken).Result;
|
||||
if (sent)
|
||||
{
|
||||
emailMessage.AppendLine();
|
||||
|
||||
var sent = false;
|
||||
|
||||
// perform a world save
|
||||
if (!string.IsNullOrWhiteSpace(Config.Default.ServerBackup_WorldSaveMessage))
|
||||
{
|
||||
ProcessAlert(AlertType.Backup, Config.Default.ServerBackup_WorldSaveMessage);
|
||||
sent = SendMessageAsync(Config.Default.ServerBackup_WorldSaveMessage, CancellationToken.None).Result;
|
||||
if (sent)
|
||||
{
|
||||
emailMessage.AppendLine("sent server save message.");
|
||||
}
|
||||
}
|
||||
|
||||
sent = SendCommandAsync(Config.Default.ServerSaveCommand, false).Result;
|
||||
if (sent)
|
||||
{
|
||||
emailMessage.AppendLine("sent server save command.");
|
||||
Task.Delay(Config.Default.ServerShutdown_WorldSaveDelay * 1000).Wait();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine($"RCON> {Config.Default.ServerSaveCommand} command.\r\n{ex.Message}");
|
||||
emailMessage.AppendLine("sent server save message.");
|
||||
}
|
||||
}
|
||||
finally
|
||||
|
||||
sent = SendCommandAsync(Config.Default.ServerSaveCommand, false).Result;
|
||||
if (sent)
|
||||
{
|
||||
CloseRconConsole();
|
||||
emailMessage.AppendLine("sent server save command.");
|
||||
Task.Delay(Config.Default.ServerShutdown_WorldSaveDelay * 1000).Wait();
|
||||
}
|
||||
}
|
||||
else
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogProfileMessage("RCON not enabled.");
|
||||
Debug.WriteLine($"RCON> {Config.Default.ServerSaveCommand} command.\r\n{ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
if (ExitCode != EXITCODE_NORMALEXIT)
|
||||
return;
|
||||
if (cancellationToken.IsCancellationRequested)
|
||||
{
|
||||
ExitCode = EXITCODE_CANCELLED;
|
||||
return;
|
||||
}
|
||||
|
||||
// make a backup of the current profile and config files.
|
||||
CreateProfileBackupArchiveFile(_profile);
|
||||
|
||||
if (ExitCode != EXITCODE_NORMALEXIT)
|
||||
return;
|
||||
if (cancellationToken.IsCancellationRequested)
|
||||
{
|
||||
ExitCode = EXITCODE_CANCELLED;
|
||||
return;
|
||||
}
|
||||
|
||||
// make a backup of the current world file.
|
||||
CreateServerBackupArchiveFile(emailMessage, _profile);
|
||||
|
||||
if (ExitCode != EXITCODE_NORMALEXIT)
|
||||
return;
|
||||
if (cancellationToken.IsCancellationRequested)
|
||||
{
|
||||
ExitCode = EXITCODE_CANCELLED;
|
||||
return;
|
||||
}
|
||||
|
||||
if (Config.Default.EmailNotify_AutoBackup)
|
||||
{
|
||||
|
|
@ -269,7 +269,7 @@ namespace ServerManagerTool.Lib
|
|||
try
|
||||
{
|
||||
ServerStatusChangeCallback?.Invoke(ServerStatus.Updating);
|
||||
UpgradeLocal(true, cancellationToken, true);
|
||||
UpgradeLocal(true, true, cancellationToken);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
|
@ -310,17 +310,20 @@ namespace ServerManagerTool.Lib
|
|||
return;
|
||||
}
|
||||
|
||||
// check if the server was previously running before the update.
|
||||
if (!_serverRunning && !_profile.AutoRestartIfShutdown)
|
||||
// check if the server was previously running.
|
||||
if (!_serverRunning)
|
||||
{
|
||||
LogProfileMessage("Server was not running, server will not be started.");
|
||||
if (_profile.AutoRestartIfShutdown)
|
||||
{
|
||||
LogProfileMessage("Server was not running, server will be started as the setting to restart if shutdown is TRUE.");
|
||||
}
|
||||
else
|
||||
{
|
||||
LogProfileMessage("Server was not running, server will not be started.");
|
||||
|
||||
ExitCode = EXITCODE_NORMALEXIT;
|
||||
return;
|
||||
}
|
||||
if (!_serverRunning && _profile.AutoRestartIfShutdown)
|
||||
{
|
||||
LogProfileMessage("Server was not running, server will be started as the setting to restart if shutdown is TRUE.");
|
||||
ExitCode = EXITCODE_NORMALEXIT;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Find the server process.
|
||||
|
|
@ -404,7 +407,7 @@ namespace ServerManagerTool.Lib
|
|||
try
|
||||
{
|
||||
// create a connection to the server
|
||||
var endPoint = new IPEndPoint(IPAddress.Parse(_profile.ServerIP), _profile.QueryPort);
|
||||
var endPoint = new IPEndPoint(_profile.ServerIPAddress, _profile.QueryPort);
|
||||
gameServer = QueryMaster.ServerQuery.GetServerInstance(QueryMaster.EngineType.Source, endPoint);
|
||||
|
||||
// check if there is a shutdown reason
|
||||
|
|
@ -417,10 +420,6 @@ namespace ServerManagerTool.Lib
|
|||
}
|
||||
|
||||
LogProfileMessage("Starting shutdown timer...");
|
||||
if (!CheckForOnlinePlayers)
|
||||
{
|
||||
LogProfileMessage("CheckForOnlinePlayers disabled, shutdown timer will not perform online player check.");
|
||||
}
|
||||
|
||||
var minutesLeft = ShutdownInterval;
|
||||
while (minutesLeft > 0)
|
||||
|
|
@ -432,7 +431,7 @@ namespace ServerManagerTool.Lib
|
|||
if (!string.IsNullOrWhiteSpace(Config.Default.ServerShutdown_CancelMessage))
|
||||
{
|
||||
ProcessAlert(AlertType.Shutdown, Config.Default.ServerShutdown_CancelMessage);
|
||||
SendMessageAsync(Config.Default.ServerShutdown_CancelMessage, CancellationToken.None).Wait();
|
||||
SendMessageAsync(Config.Default.ServerShutdown_CancelMessage, cancellationToken).Wait();
|
||||
}
|
||||
|
||||
ExitCode = EXITCODE_CANCELLED;
|
||||
|
|
@ -462,7 +461,8 @@ namespace ServerManagerTool.Lib
|
|||
}
|
||||
else
|
||||
{
|
||||
Debug.WriteLine($"CheckForOnlinePlayers disabled");
|
||||
Debug.WriteLine($"CheckForOnlinePlayers disabled, shutdown timer cancelled.");
|
||||
break;
|
||||
}
|
||||
|
||||
var message = string.Empty;
|
||||
|
|
@ -536,7 +536,7 @@ namespace ServerManagerTool.Lib
|
|||
{
|
||||
LogProfileMessage(Config.Default.ServerShutdown_WorldSaveMessage);
|
||||
ProcessAlert(AlertType.ShutdownMessage, Config.Default.ServerShutdown_WorldSaveMessage);
|
||||
SendMessageAsync(Config.Default.ServerShutdown_WorldSaveMessage, cancellationToken).Wait();
|
||||
SendMessageAsync(Config.Default.ServerShutdown_WorldSaveMessage, cancellationToken).Wait(cancellationToken);
|
||||
}
|
||||
|
||||
if (SendCommandAsync(Config.Default.ServerSaveCommand, false).Result)
|
||||
|
|
@ -561,7 +561,7 @@ namespace ServerManagerTool.Lib
|
|||
if (!string.IsNullOrWhiteSpace(Config.Default.ServerShutdown_CancelMessage))
|
||||
{
|
||||
ProcessAlert(AlertType.Shutdown, Config.Default.ServerShutdown_CancelMessage);
|
||||
SendMessageAsync(Config.Default.ServerShutdown_CancelMessage, CancellationToken.None).Wait();
|
||||
SendMessageAsync(Config.Default.ServerShutdown_CancelMessage, cancellationToken).Wait();
|
||||
}
|
||||
|
||||
ExitCode = EXITCODE_CANCELLED;
|
||||
|
|
@ -587,8 +587,6 @@ namespace ServerManagerTool.Lib
|
|||
}
|
||||
finally
|
||||
{
|
||||
CloseRconConsole();
|
||||
|
||||
gameServer?.Dispose();
|
||||
gameServer = null;
|
||||
}
|
||||
|
|
@ -600,11 +598,9 @@ namespace ServerManagerTool.Lib
|
|||
if (!string.IsNullOrWhiteSpace(Config.Default.ServerShutdown_CancelMessage))
|
||||
{
|
||||
ProcessAlert(AlertType.Shutdown, Config.Default.ServerShutdown_CancelMessage);
|
||||
SendMessageAsync(Config.Default.ServerShutdown_CancelMessage, CancellationToken.None).Wait();
|
||||
SendMessageAsync(Config.Default.ServerShutdown_CancelMessage, cancellationToken).Wait();
|
||||
}
|
||||
|
||||
CloseRconConsole();
|
||||
|
||||
ExitCode = EXITCODE_CANCELLED;
|
||||
return;
|
||||
}
|
||||
|
|
@ -653,8 +649,6 @@ namespace ServerManagerTool.Lib
|
|||
LogProfileMessage("Exiting server timed out, attempting to close the server.");
|
||||
}
|
||||
|
||||
CloseRconConsole();
|
||||
|
||||
// Method 2 - Close the process
|
||||
sent = process.CloseMainWindow();
|
||||
|
||||
|
|
@ -721,7 +715,7 @@ namespace ServerManagerTool.Lib
|
|||
ExitCode = EXITCODE_SHUTDOWN_TIMEOUT;
|
||||
}
|
||||
|
||||
private void UpgradeLocal(bool validate, CancellationToken cancellationToken, bool updateMods)
|
||||
private void UpgradeLocal(bool validate, bool updateMods, CancellationToken cancellationToken)
|
||||
{
|
||||
if (_profile == null)
|
||||
{
|
||||
|
|
@ -1250,7 +1244,7 @@ namespace ServerManagerTool.Lib
|
|||
{
|
||||
// perform a steamcmd validate to confirm all the files
|
||||
LogProfileMessage("Validating server files (*new*).");
|
||||
UpgradeLocal(true, CancellationToken.None, false);
|
||||
UpgradeLocal(true, false, CancellationToken.None);
|
||||
LogProfileMessage("Validated server files (*new*).");
|
||||
}
|
||||
|
||||
|
|
@ -1776,17 +1770,6 @@ namespace ServerManagerTool.Lib
|
|||
ExitCode = EXITCODE_NORMALEXIT;
|
||||
}
|
||||
|
||||
private void CloseRconConsole()
|
||||
{
|
||||
if (_rconConsole != null)
|
||||
{
|
||||
_rconConsole.Dispose();
|
||||
_rconConsole = null;
|
||||
|
||||
Task.Delay(1000).Wait();
|
||||
}
|
||||
}
|
||||
|
||||
public void CheckServerWorldFileExists(ServerProfileSnapshot profile = null)
|
||||
{
|
||||
// do nothing if profile is null or SotF
|
||||
|
|
@ -2578,39 +2561,42 @@ namespace ServerManagerTool.Lib
|
|||
int rconRetries = 0;
|
||||
int maxRetries = retryIfFailed ? RCON_MAXRETRIES : 1;
|
||||
|
||||
while (retries < maxRetries && rconRetries < RCON_MAXRETRIES)
|
||||
try
|
||||
{
|
||||
SetupRconConsole();
|
||||
|
||||
if (_rconConsole == null)
|
||||
while (retries < maxRetries && rconRetries < RCON_MAXRETRIES)
|
||||
{
|
||||
LogProfileMessage($"RCON> {command} - attempt {rconRetries + 1} (a).", false);
|
||||
#if DEBUG
|
||||
LogProfileMessage("RCON connection not created.", false);
|
||||
#endif
|
||||
rconRetries++;
|
||||
}
|
||||
else
|
||||
{
|
||||
rconRetries = 0;
|
||||
try
|
||||
{
|
||||
_rconConsole.SendCommand(command);
|
||||
LogProfileMessage($"RCON> {command}");
|
||||
SetupRconConsole();
|
||||
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
if (_rconConsole == null)
|
||||
{
|
||||
LogProfileMessage($"RCON> {command} - attempt {retries + 1} (b).", false);
|
||||
#if DEBUG
|
||||
LogProfileMessage($"{ex.Message}", false);
|
||||
#endif
|
||||
LogProfileMessage($"RCON> {command} - attempt {rconRetries + 1} (a).", false);
|
||||
LogProfileMessage("RCON connection not created.", false);
|
||||
rconRetries++;
|
||||
}
|
||||
else
|
||||
{
|
||||
rconRetries = 0;
|
||||
try
|
||||
{
|
||||
_rconConsole.SendCommand(command);
|
||||
LogProfileMessage($"RCON> {command}");
|
||||
|
||||
retries++;
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogProfileMessage($"RCON> {command} - attempt {retries + 1} (b).", false);
|
||||
LogProfileMessage($"{ex.Message}", false);
|
||||
}
|
||||
|
||||
retries++;
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
CloseRconConsole();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
@ -2672,6 +2658,17 @@ namespace ServerManagerTool.Lib
|
|||
}
|
||||
}
|
||||
|
||||
private void CloseRconConsole()
|
||||
{
|
||||
if (_rconConsole != null)
|
||||
{
|
||||
_rconConsole.Dispose();
|
||||
_rconConsole = null;
|
||||
|
||||
Task.Delay(1000).Wait();
|
||||
}
|
||||
}
|
||||
|
||||
private void SetupRconConsole()
|
||||
{
|
||||
CloseRconConsole();
|
||||
|
|
@ -2681,7 +2678,7 @@ namespace ServerManagerTool.Lib
|
|||
|
||||
try
|
||||
{
|
||||
var endPoint = new IPEndPoint(IPAddress.Parse(_profile.ServerIP), _profile.RCONPort);
|
||||
var endPoint = new IPEndPoint(_profile.ServerIPAddress, _profile.RCONPort);
|
||||
var server = QueryMaster.ServerQuery.GetServerInstance(QueryMaster.EngineType.Source, endPoint, sendTimeOut: 10000, receiveTimeOut: 10000);
|
||||
if (server == null)
|
||||
{
|
||||
|
|
@ -2718,7 +2715,7 @@ namespace ServerManagerTool.Lib
|
|||
}
|
||||
}
|
||||
|
||||
public int PerformProfileBackup(ServerProfileSnapshot profile)
|
||||
public int PerformProfileBackup(ServerProfileSnapshot profile, CancellationToken cancellationToken)
|
||||
{
|
||||
_profile = profile;
|
||||
|
||||
|
|
@ -2743,7 +2740,7 @@ namespace ServerManagerTool.Lib
|
|||
// check if the mutex was established
|
||||
if (createdNew)
|
||||
{
|
||||
BackupServer();
|
||||
BackupServer(cancellationToken);
|
||||
|
||||
if (ExitCode != EXITCODE_NORMALEXIT)
|
||||
{
|
||||
|
|
@ -3099,7 +3096,7 @@ namespace ServerManagerTool.Lib
|
|||
SendEmails = true,
|
||||
ServerProcess = ServerProcessType.AutoBackup
|
||||
};
|
||||
exitCodes.TryAdd(profile, app.PerformProfileBackup(profile));
|
||||
exitCodes.TryAdd(profile, app.PerformProfileBackup(profile, CancellationToken.None));
|
||||
});
|
||||
|
||||
foreach (var profile in _profiles.Keys)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue