inotify/Inotify/StartupManager.cs

78 lines
1.7 KiB
C#

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using System.Threading;
namespace Inotify
{
public class StartUpManager
{
private static StartUpManager _appManager;
private CancellationTokenSource _tokenSource;
private bool _running;
private bool _restart;
public bool Restarting => _restart;
public StartUpManager()
{
_running = false;
_restart = false;
}
public static StartUpManager Load()
{
if (_appManager == null)
{
_appManager = new StartUpManager();
}
return _appManager;
}
public void Start(string[] args)
{
if (_running)
{
return;
}
if (_tokenSource != null && _tokenSource.IsCancellationRequested)
{
return;
}
_tokenSource = new CancellationTokenSource();
_tokenSource.Token.ThrowIfCancellationRequested();
_running = true;
var hostBuilder = Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).Build();
hostBuilder.RunAsync(_tokenSource.Token);
hostBuilder.WaitForShutdown();
}
public void Stop()
{
if (!_running)
{
return;
}
_tokenSource.Cancel();
_running = false;
}
public void Restart()
{
Stop();
_restart = true;
_tokenSource = null;
}
}
}