From 627d67be39ab862f94ece27563625c1e8fcda9b1 Mon Sep 17 00:00:00 2001 From: RuKira Date: Mon, 13 Apr 2026 16:27:12 -0400 Subject: [PATCH] Shutdown ("Exit", "Stop") now exist --- RelayCore/Program.cs | 2 +- RelayServer/Program.cs | 4 +- RelayShared/Services/ConsoleCommandService.cs | 38 +++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 RelayShared/Services/ConsoleCommandService.cs diff --git a/RelayCore/Program.cs b/RelayCore/Program.cs index 6d0a21a..d7a0e2d 100644 --- a/RelayCore/Program.cs +++ b/RelayCore/Program.cs @@ -20,12 +20,12 @@ var kira = await CreateUserAsync(db, "Ru_Kira", "jduesling13@gmail.com", "passwo var test = await CreateUserAsync(db, "Test", "test@gmail.com", "password"); var server = new Program(); -server.Main(db); Console.WriteLine($"Keeper created: {ToJsonString(keeper)}"); Console.WriteLine($"Kira created: {ToJsonString(kira)}"); Console.WriteLine($"Test created: {ToJsonString(test)}"); +await server.Main(db); Console.ReadKey(true); return; diff --git a/RelayServer/Program.cs b/RelayServer/Program.cs index 7be1a0e..acdcc4c 100644 --- a/RelayServer/Program.cs +++ b/RelayServer/Program.cs @@ -4,6 +4,7 @@ using RelayServer.Services.Core; using RelayServer.Services.Data; using RelayServer.Services.Rtc; using RelayShared.Rtc; +using RelayShared.Services; using WebSocketSharp.Server; var surrealService = new SurrealService(); @@ -41,7 +42,8 @@ Console.WriteLine("WebSocket server started"); await app.StartAsync(); Console.WriteLine("HTTP API started"); -Console.ReadKey(true); // TODO: Make program stop be a console command +ConsoleCommandService.Start(); +await Task.Delay(Timeout.Infinite, ConsoleCommandService.ShutdownTokenSource.Token); wssv.Stop(); await app.StopAsync(); diff --git a/RelayShared/Services/ConsoleCommandService.cs b/RelayShared/Services/ConsoleCommandService.cs new file mode 100644 index 0000000..f7f86b7 --- /dev/null +++ b/RelayShared/Services/ConsoleCommandService.cs @@ -0,0 +1,38 @@ +namespace RelayShared.Services; + +public static class ConsoleCommandService +{ + public static CancellationTokenSource ShutdownTokenSource { get; } = new(); + + public static void Start() + { + Task.Run(() => + { + while (!ShutdownTokenSource.IsCancellationRequested) + { + var input = Console.ReadLine(); + + if (string.IsNullOrWhiteSpace(input)) + continue; + + HandleCommand(input.Trim().ToLower()); + } + }); + } + + private static void HandleCommand(string command) + { + switch (command) + { + case "exit": + case "stop": + Console.WriteLine("Shutting down..."); + ShutdownTokenSource.Cancel(); + break; + + default: + Console.WriteLine($"Unknown command: {command}"); + break; + } + } +} \ No newline at end of file