// Author: Gockner, Simon // Created: 2020-02-07 // Copyright(c) 2020 SimonG. All Rights Reserved. using System; using System.Threading.Tasks; using GBase.Logging; using GBase.Logging.Interfaces; using GBase.Server.Interfaces; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; namespace GBase.Server { class Program { static async Task Main(string[] args) { try { ILog log = new Log(); log.InitializeLog(); log.AddLogger(new ConsoleLogger()); IGBaseServerSettings serverSettings = new GBaseServerSettings(); await serverSettings.ParseArguments(args); log.AddLogger(new FileLogger(serverSettings.LogFilePath, serverSettings.LogFileName)); IWebHost host = CreateWebHostBuilder(serverSettings).Build(); await host.RunAsync(); host.Dispose(); //TestMe: Check if this destroys the server while it is running await log.DisposeAsync(); } catch (Exception ex) //TODO: decide what to do in this case { Console.WriteLine(ex); throw; } } private static IWebHostBuilder CreateWebHostBuilder(IGBaseServerSettings serverSettings) => WebHost.CreateDefaultBuilder() .UseKestrel(options => { options.Listen(serverSettings.IpAddress, serverSettings.Port); }) .UseUrls($"{serverSettings.Protocol.GetProtocolString()}{serverSettings.IpAddress}:{serverSettings.Port}") .ConfigureAppConfiguration((hostingContext, config) => { config.AddCommandLine(new[] {GBaseServerSettings.ENDPOINT_STARTUP_CONFIGURATION_PREFIX, serverSettings.Endpoint}); }) .UseStartup(); } }