Server mode for Gui&Console

This commit is contained in:
2023-09-05 12:13:06 +02:00
parent 22ca9d7822
commit 0da5273c97
8 changed files with 134 additions and 86 deletions

View File

@@ -2,83 +2,89 @@
using Autofac.Extensions.DependencyInjection;
using FileTime.App.DependencyInjection;
using FileTime.Providers.Local;
using FileTime.Server;
using FileTime.Server.App;
using FileTime.Server.Common;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
namespace FileTime.Server;
var applicationCancellation = new CancellationTokenSource();
var configurationRoot = CreateConfiguration();
public static class Program
{
public static void Main(string[] args)
{
var applicationCancellation = new CancellationTokenSource();
var configurationRoot = CreateConfiguration();
Log.Logger = new LoggerConfiguration()
Log.Logger = new LoggerConfiguration()
#if DEBUG
.MinimumLevel.Verbose()
.ReadFrom.Configuration(configurationRoot)
.MinimumLevel.Verbose()
.ReadFrom.Configuration(configurationRoot)
#else
.MinimumLevel.Information()
#endif
.WriteTo.Console()
.CreateLogger();
.WriteTo.Console()
.CreateLogger();
var rootContainer = CreateRootDiContainer(configurationRoot);
var rootContainer = CreateRootDiContainer(configurationRoot);
var handlerParameters = new ConnectionHandlerParameters(
args,
rootContainer,
configurationRoot,
applicationCancellation.Token
);
var handlerParameters = new ConnectionHandlerParameters(
args,
rootContainer,
configurationRoot,
applicationCancellation.Token
);
var webThread = CreateStartup(FileTime.Server.Web.Program.Start);
webThread.Start();
var webThread = CreateStartup(FileTime.Server.Web.Program.Start);
webThread.Start();
Thread CreateStartup(Func<ConnectionHandlerParameters, Task> startup)
{
var thread = new Thread(() => { HandleStartup(() => startup(handlerParameters).Wait()); });
return thread;
}
Thread CreateStartup(Func<ConnectionHandlerParameters, Task> startup)
{
var thread = new Thread(() => { HandleStartup(() => startup(handlerParameters).Wait()); });
return thread;
}
void HandleStartup(Action action)
{
try
{
action();
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
void HandleStartup(Action action)
{
try
{
action();
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
IConfigurationRoot CreateConfiguration()
{
var configurationBuilder = new ConfigurationBuilder();
IConfigurationRoot CreateConfiguration()
{
var configurationBuilder = new ConfigurationBuilder();
#if DEBUG
configurationBuilder.AddJsonFile("appsettings.Development.json", optional: true);
configurationBuilder.AddJsonFile("appsettings.Local.json", optional: true);
configurationBuilder.AddJsonFile("appsettings.Development.json", optional: true);
configurationBuilder.AddJsonFile("appsettings.Local.json", optional: true);
#endif
configurationBuilder.AddCommandLine(args);
return configurationBuilder.Build();
}
configurationBuilder.AddCommandLine(args);
return configurationBuilder.Build();
}
IContainer CreateRootDiContainer(IConfigurationRoot configuration)
{
var serviceCollection = DependencyInjection
.RegisterDefaultServices(configuration)
.AddLocalProviderServices()
.AddServerServices()
.AddServerCoreServices()
.AddLogging(loggingBuilder => loggingBuilder.AddSerilog());
IContainer CreateRootDiContainer(IConfigurationRoot configuration)
{
var serviceCollection = DependencyInjection
.RegisterDefaultServices(configuration)
.AddLocalProviderServices()
.AddServerServices()
.AddServerCoreServices()
.AddLogging(loggingBuilder => loggingBuilder.AddSerilog());
serviceCollection.AddSingleton<IApplicationStopper>(
new ApplicationStopper(() => applicationCancellation.Cancel())
);
serviceCollection.AddSingleton<IApplicationStopper>(
new ApplicationStopper(() => applicationCancellation.Cancel())
);
var containerBuilder = new ContainerBuilder();
containerBuilder.Populate(serviceCollection);
return containerBuilder.Build();
var containerBuilder = new ContainerBuilder();
containerBuilder.Populate(serviceCollection);
return containerBuilder.Build();
}
}
}