prompt user to continue if not all servers can be connected

issue #58
This commit is contained in:
RaidMax 2019-02-24 19:35:59 -06:00
parent 0c527a5f65
commit 61f1436faf

View File

@ -427,10 +427,16 @@ namespace IW4MAdmin.Application
#endregion #endregion
#region INIT #region INIT
int failedServers = 0;
int successServers = 0;
Exception lastException = null;
async Task Init(ServerConfiguration Conf) async Task Init(ServerConfiguration Conf)
{ {
// setup the event handler after the class is initialized // setup the event handler after the class is initialized
Handler = new GameEventHandler(this); Handler = new GameEventHandler(this);
try try
{ {
var ServerInstance = new IW4MServer(this, Conf); var ServerInstance = new IW4MServer(this, Conf);
@ -452,26 +458,37 @@ namespace IW4MAdmin.Application
}; };
Handler.AddEvent(e); Handler.AddEvent(e);
successServers++;
} }
catch (ServerException e) catch (ServerException e)
{ {
Logger.WriteError($"{Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_UNFIXABLE"]} [{Conf.IPAddress}:{Conf.Port}]"); Logger.WriteError($"{Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_UNFIXABLE"]} [{Conf.IPAddress}:{Conf.Port}]");
if (e.GetType() == typeof(DvarException)) if (e.GetType() == typeof(DvarException))
{ {
Logger.WriteDebug($"{Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_DVAR"]} {(e as DvarException).Data["dvar_name"]} ({Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_DVAR_HELP"]})"); Logger.WriteDebug($"{Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_DVAR"]} {(e as DvarException).Data["dvar_name"]} ({Utilities.CurrentLocalization.LocalizationIndex["SERVER_ERROR_DVAR_HELP"]})");
} }
else if (e.GetType() == typeof(NetworkException)) else if (e.GetType() == typeof(NetworkException))
{ {
Logger.WriteDebug(e.Message); Logger.WriteDebug(e.Message);
} }
// throw the exception to the main method to stop before instantly exiting failedServers++;
throw e; lastException = e;
} }
} }
await Task.WhenAll(config.Servers.Select(c => Init(c)).ToArray()); await Task.WhenAll(config.Servers.Select(c => Init(c)).ToArray());
if (failedServers > 0 && successServers > 0)
{
if (!Utilities.PromptBool(Utilities.CurrentLocalization.LocalizationIndex["MANAGER_START_WITH_ERRORS"]))
{
throw lastException;
}
}
#endregion #endregion
} }