|
@@ -0,0 +1,98 @@
|
|
|
+using NetBootServerCore.Components.Nbs;
|
|
|
+using NetBootServerCore.Components.UI.Cui;
|
|
|
+using NetBootServerCore.Components.UI.Http;
|
|
|
+using NetBootServerCore.Components.UI.Http.StaticContent;
|
|
|
+using NetBootServerCore.Components.UI.Http.WebApi;
|
|
|
+
|
|
|
+namespace NetBootServerCore;
|
|
|
+
|
|
|
+public static class NbsProgram
|
|
|
+{
|
|
|
+ public static readonly DateTime StartTime;
|
|
|
+
|
|
|
+ static NbsProgram()
|
|
|
+ {
|
|
|
+ StartTime = DateTime.Now;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static void Main(string[] args)
|
|
|
+ {
|
|
|
+ var lc = new LiveConsole();
|
|
|
+ var logger = lc.CreateLogger("APP");
|
|
|
+ Task.Run(lc.Start);
|
|
|
+
|
|
|
+ logger.LogDebug("Logger Init");
|
|
|
+ logger.LogVerbose("Logger Init");
|
|
|
+ logger.LogInfo("Logger Init");
|
|
|
+ logger.LogWarn("Logger Init");
|
|
|
+ logger.LogError("Logger Init");
|
|
|
+ logger.LogFatal("Logger Init");
|
|
|
+
|
|
|
+ logger.LogInfo("Load config");
|
|
|
+ var config = WebApplication.CreateBuilder(args).Configuration;
|
|
|
+ var httpPrefix = config.GetSection("Web")["Prefix"];
|
|
|
+ Console.Title = $"{nameof(NetBootServerCore)} at {httpPrefix}";
|
|
|
+ Environment.SetEnvironmentVariable("ASPNETCORE_URLS", httpPrefix);
|
|
|
+
|
|
|
+ logger.LogInfo("Create components");
|
|
|
+ var dhcp = new DhcpServer(lc);
|
|
|
+ var tftp = new TftpServer(lc);
|
|
|
+ var scriptServer = new iPxeScriptProcessor(lc);
|
|
|
+ var apiServer = new WebApiProcessor(lc, dhcp);
|
|
|
+ var staticServer = new StaticContentProcessor(lc);
|
|
|
+ var httpServer = new HttpServer(lc, new IHttpRequestProcessor[] { scriptServer, apiServer, staticServer });
|
|
|
+
|
|
|
+ logger.LogInfo("Start components");
|
|
|
+ dhcp.Start();
|
|
|
+ tftp.Start();
|
|
|
+ scriptServer.Start();
|
|
|
+ apiServer.Start();
|
|
|
+ staticServer.Start();
|
|
|
+ httpServer.Start();
|
|
|
+
|
|
|
+ logger.LogInfo("Running");
|
|
|
+
|
|
|
+ //Waiting until Control-C
|
|
|
+ {
|
|
|
+ CancellationTokenSource ctSource = new();
|
|
|
+ var ct = ctSource.Token;
|
|
|
+
|
|
|
+ void ExitHandler()
|
|
|
+ {
|
|
|
+ // You can add any arbitrary global clean up
|
|
|
+ logger.LogInfo("Exiting...");
|
|
|
+ ctSource.Cancel();
|
|
|
+ }
|
|
|
+
|
|
|
+ // Assign exit handler to be called when the process is terminated
|
|
|
+ // or the user hits CTRL+C
|
|
|
+ AppDomain.CurrentDomain.ProcessExit += (_, _) => ExitHandler();
|
|
|
+ Console.CancelKeyPress += (_, _) => ExitHandler();
|
|
|
+
|
|
|
+ // Then you can use the cancellation token to check for exit:
|
|
|
+ while (!ct.IsCancellationRequested)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ Task.Delay(1000, ct).Wait(ct);
|
|
|
+ }
|
|
|
+ catch (OperationCanceledException e)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //stop components
|
|
|
+ dhcp.Stop();
|
|
|
+ tftp.Stop();
|
|
|
+ apiServer.Stop();
|
|
|
+ scriptServer.Stop();
|
|
|
+ staticServer.Stop();
|
|
|
+ httpServer.Stop();
|
|
|
+
|
|
|
+ logger.LogInfo("Finished");
|
|
|
+ lc.Stop();
|
|
|
+
|
|
|
+ }
|
|
|
+}
|