Merge pull request #97 from RaidMax/bugfix/issue-95-fix-restart-command
Bugfix/issue 95 fix restart command
This commit is contained in:
commit
01198b66ea
@ -42,8 +42,7 @@ namespace IW4MAdmin.Application
|
||||
public CancellationToken CancellationToken => _tokenSource.Token;
|
||||
public string ExternalIPAddress { get; private set; }
|
||||
public bool IsRestartRequested { get; private set; }
|
||||
public IMiddlewareActionHandler MiddlewareActionHandler { get; private set; } = new MiddlewareActionHandler();
|
||||
static ApplicationManager Instance;
|
||||
public IMiddlewareActionHandler MiddlewareActionHandler { get; }
|
||||
private readonly List<Command> Commands;
|
||||
private readonly List<MessageToken> MessageTokens;
|
||||
private readonly ClientService ClientSvc;
|
||||
@ -52,14 +51,15 @@ namespace IW4MAdmin.Application
|
||||
public BaseConfigurationHandler<ApplicationConfiguration> ConfigHandler;
|
||||
GameEventHandler Handler;
|
||||
readonly IPageList PageList;
|
||||
readonly Dictionary<long, ILogger> Loggers = new Dictionary<long, ILogger>();
|
||||
private readonly Dictionary<long, ILogger> _loggers = new Dictionary<long, ILogger>();
|
||||
private readonly MetaService _metaService;
|
||||
private readonly TimeSpan _throttleTimeout = new TimeSpan(0, 1, 0);
|
||||
private readonly CancellationTokenSource _tokenSource;
|
||||
private readonly Dictionary<string, Task<IList>> _operationLookup = new Dictionary<string, Task<IList>>();
|
||||
|
||||
private ApplicationManager()
|
||||
public ApplicationManager(ILogger logger, IMiddlewareActionHandler actionHandler)
|
||||
{
|
||||
MiddlewareActionHandler = actionHandler;
|
||||
_servers = new ConcurrentBag<Server>();
|
||||
Commands = new List<Command>();
|
||||
MessageTokens = new List<MessageToken>();
|
||||
@ -74,6 +74,7 @@ namespace IW4MAdmin.Application
|
||||
TokenAuthenticator = new TokenAuthentication();
|
||||
_metaService = new MetaService();
|
||||
_tokenSource = new CancellationTokenSource();
|
||||
_loggers.Add(0, logger);
|
||||
}
|
||||
|
||||
public async Task ExecuteEvent(GameEvent newEvent)
|
||||
@ -156,11 +157,6 @@ namespace IW4MAdmin.Application
|
||||
return Commands;
|
||||
}
|
||||
|
||||
public static ApplicationManager GetInstance()
|
||||
{
|
||||
return Instance ?? (Instance = new ApplicationManager());
|
||||
}
|
||||
|
||||
public async Task UpdateServerStates()
|
||||
{
|
||||
// store the server hash code and task for it
|
||||
@ -681,7 +677,6 @@ namespace IW4MAdmin.Application
|
||||
{
|
||||
_tokenSource.Cancel();
|
||||
Running = false;
|
||||
Instance = null;
|
||||
}
|
||||
|
||||
public void Restart()
|
||||
@ -692,25 +687,16 @@ namespace IW4MAdmin.Application
|
||||
|
||||
public ILogger GetLogger(long serverId)
|
||||
{
|
||||
if (Loggers.ContainsKey(serverId))
|
||||
if (_loggers.ContainsKey(serverId))
|
||||
{
|
||||
return Loggers[serverId];
|
||||
return _loggers[serverId];
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
Logger newLogger;
|
||||
var newLogger = new Logger($"IW4MAdmin-Server-{serverId}");
|
||||
|
||||
if (serverId == 0)
|
||||
{
|
||||
newLogger = new Logger("IW4MAdmin-Manager");
|
||||
}
|
||||
else
|
||||
{
|
||||
newLogger = new Logger($"IW4MAdmin-Server-{serverId}");
|
||||
}
|
||||
|
||||
Loggers.Add(serverId, newLogger);
|
||||
_loggers.Add(serverId, newLogger);
|
||||
return newLogger;
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using IW4MAdmin.Application.Migration;
|
||||
using IW4MAdmin.Application.Misc;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using SharedLibraryCore;
|
||||
using SharedLibraryCore.Helpers;
|
||||
@ -60,7 +61,13 @@ namespace IW4MAdmin.Application
|
||||
restart:
|
||||
try
|
||||
{
|
||||
ServerManager = ApplicationManager.GetInstance();
|
||||
var services = ConfigureServices();
|
||||
|
||||
using (var builder = services.BuildServiceProvider())
|
||||
{
|
||||
ServerManager = (ApplicationManager)builder.GetRequiredService<IManager>();
|
||||
}
|
||||
|
||||
var configuration = ServerManager.GetApplicationSettings().Configuration();
|
||||
Localization.Configure.Initialize(configuration?.EnableCustomLocale ?? false ? (configuration.CustomLocale ?? "en-US") : "en-US");
|
||||
|
||||
@ -70,7 +77,7 @@ namespace IW4MAdmin.Application
|
||||
|
||||
ServerManager.Logger.WriteInfo(Utilities.CurrentLocalization.LocalizationIndex["MANAGER_VERSION"].FormatExt(Version));
|
||||
|
||||
ConfigureServices();
|
||||
|
||||
await CheckVersion();
|
||||
await ServerManager.Init();
|
||||
}
|
||||
@ -235,12 +242,17 @@ namespace IW4MAdmin.Application
|
||||
{ }
|
||||
}
|
||||
|
||||
private static void ConfigureServices()
|
||||
/// <summary>
|
||||
/// Configures the dependency injection services
|
||||
/// </summary>
|
||||
private static IServiceCollection ConfigureServices()
|
||||
{
|
||||
var serviceProvider = new ServiceCollection();
|
||||
serviceProvider.AddSingleton<IManager>(ServerManager);
|
||||
var builder = serviceProvider.BuildServiceProvider();
|
||||
builder.Dispose();
|
||||
serviceProvider.AddSingleton<IManager, ApplicationManager>()
|
||||
.AddSingleton<ILogger>(_serviceProvider => new Logger("IW4MAdmin-Manager"))
|
||||
.AddSingleton<IMiddlewareActionHandler, MiddlewareActionHandler>();
|
||||
|
||||
return serviceProvider;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +1,29 @@
|
||||
using SharedLibraryCore.Interfaces;
|
||||
using SharedLibraryCore;
|
||||
using SharedLibraryCore.Interfaces;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace IW4MAdmin.Application.Misc
|
||||
{
|
||||
class MiddlewareActionHandler : IMiddlewareActionHandler
|
||||
{
|
||||
private static readonly IDictionary<string, IList<object>> _actions = new Dictionary<string, IList<object>>();
|
||||
private readonly IDictionary<string, IList<object>> _actions;
|
||||
private readonly ILogger _logger;
|
||||
|
||||
public MiddlewareActionHandler(ILogger logger)
|
||||
{
|
||||
_actions = new Dictionary<string, IList<object>>();
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Executes the action with the given name
|
||||
/// </summary>
|
||||
/// <typeparam name="T">Execution return type</typeparam>
|
||||
/// <param name="value">Input value</param>
|
||||
/// <param name="name">Name of action to execute</param>
|
||||
/// <returns></returns>
|
||||
public async Task<T> Execute<T>(T value, string name = null)
|
||||
{
|
||||
string key = string.IsNullOrEmpty(name) ? typeof(T).ToString() : name;
|
||||
@ -22,8 +36,11 @@ namespace IW4MAdmin.Application.Misc
|
||||
{
|
||||
value = await ((IMiddlewareAction<T>)action).Invoke(value);
|
||||
}
|
||||
// todo: probably log this somewhere
|
||||
catch { }
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.WriteWarning($"Failed to invoke middleware action {name}");
|
||||
_logger.WriteDebug(e.GetExceptionInfo());
|
||||
}
|
||||
}
|
||||
|
||||
return value;
|
||||
@ -32,6 +49,13 @@ namespace IW4MAdmin.Application.Misc
|
||||
return value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registers an action by name
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="actionType">Action type specifier</param>
|
||||
/// <param name="action">Action to perform</param>
|
||||
/// <param name="name">Name of action</param>
|
||||
public void Register<T>(T actionType, IMiddlewareAction<T> action, string name = null)
|
||||
{
|
||||
string key = string.IsNullOrEmpty(name) ? typeof(T).ToString() : name;
|
||||
|
@ -2,6 +2,7 @@
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
using SharedLibraryCore;
|
||||
using SharedLibraryCore.Commands;
|
||||
using SharedLibraryCore.Configuration;
|
||||
using SharedLibraryCore.Database.Models;
|
||||
using SharedLibraryCore.Exceptions;
|
||||
@ -42,13 +43,16 @@ namespace IW4MAdmin.Plugins.Login
|
||||
E.Origin.Level == EFClient.Permission.Console)
|
||||
return Task.CompletedTask;
|
||||
|
||||
if (((Command)E.Extra).Name == new SharedLibraryCore.Commands.CSetPassword().Name &&
|
||||
if (((Command)E.Extra).Name == new CSetPassword().Name &&
|
||||
E.Origin?.Password == null)
|
||||
return Task.CompletedTask;
|
||||
|
||||
if (((Command)E.Extra).Name == new Commands.CLogin().Name)
|
||||
return Task.CompletedTask;
|
||||
|
||||
if (E.Extra.GetType() == typeof(RequestTokenCommand))
|
||||
return Task.CompletedTask;
|
||||
|
||||
if (!AuthorizedClients[E.Origin.ClientId])
|
||||
{
|
||||
throw new AuthorizationException(Utilities.CurrentLocalization.LocalizationIndex["PLUGINS_LOGIN_AUTH"]);
|
||||
|
@ -48,8 +48,8 @@ namespace IW4MAdmin.Plugins.Stats.Cheat
|
||||
public const int HighSampleMinKills = 100;
|
||||
public const double KillTimeThreshold = 0.2;
|
||||
public const int LowSampleMinKillsRecoil = 5;
|
||||
public const double SnapFlagValue = 5.5;
|
||||
public const double SnapBanValue = 8.7;
|
||||
public const double SnapFlagValue = 7.6;
|
||||
public const double SnapBanValue = 11.7;
|
||||
|
||||
public const double MaxStrainBan = 0.9;
|
||||
|
||||
|
@ -20,7 +20,7 @@ namespace Tests
|
||||
|
||||
File.WriteAllText(logFile, Environment.NewLine);
|
||||
|
||||
Manager = ApplicationManager.GetInstance();
|
||||
Manager = null;
|
||||
|
||||
var config = new ApplicationConfiguration
|
||||
{
|
||||
|
@ -1,6 +1,7 @@
|
||||
using Microsoft.AspNetCore.Authentication.Cookies;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc.ApplicationParts;
|
||||
using Microsoft.AspNetCore.Mvc.Razor;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
@ -8,6 +9,8 @@ using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using SharedLibraryCore.Database;
|
||||
using SharedLibraryCore.Interfaces;
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
using WebfrontCore.Middleware;
|
||||
|
||||
namespace WebfrontCore
|
||||
@ -95,7 +98,15 @@ namespace WebfrontCore
|
||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
|
||||
{
|
||||
app.UseStatusCodePagesWithRedirects("/Home/ResponseStatusCode?statusCode={0}");
|
||||
app.UseStatusCodePages(_context =>
|
||||
{
|
||||
if (_context.HttpContext.Response.StatusCode == (int)HttpStatusCode.NotFound)
|
||||
{
|
||||
_context.HttpContext.Response.Redirect($"/Home/ResponseStatusCode?statusCode={_context.HttpContext.Response.StatusCode}");
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
});
|
||||
|
||||
if (env.EnvironmentName == "Development")
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user