feat: starting to build a application itself

add "capture" and "camera-tuning" commands for cli
This commit is contained in:
2026-04-07 13:28:20 +03:00
parent d0ecc31da2
commit 8cf1c89863
14 changed files with 2587 additions and 55 deletions
+100
View File
@@ -0,0 +1,100 @@
namespace GSS2;
public partial class Program
{
// Список аргументов командной строки
private static List<string> _args = new List<string>();
/// <summary>
/// Точка входа
/// </summary>
[STAThread]
public static int Main(string[] args)
{
_args = args.ToList();
#if DEBUG
WaitDebuggerIfNeeded();
#endif
// Создаём обработчик аргументов командной строки
var rootCommand = Commands.UI.GetCommand();
Commands.CameraTuning.RegisterCommand(rootCommand);
Commands.Capture.RegisterCommand(rootCommand);
Commands.ImageStorageClear.RegisterCommand(rootCommand);
// Обрабатываем аргументы
var parseResult = rootCommand?.Parse(_args);
// Обрабатываем ошибки
if (parseResult is null)
{
Console.Error.WriteLine("Неизвестная ошибка при обработке аргументов командной строки.");
Environment.Exit(1);
}
if (parseResult.Errors.Count() != 0)
{
Console.Error.WriteLine(
(parseResult.Errors.Count() == 1 ? "Ошибка" : "Ошибки") +
" при обработке аргументов командной строки:"
);
foreach (var parseError in parseResult.Errors)
Console.Error.WriteLine(parseError.Message);
Environment.Exit(1);
}
// Исполняем команду
Console.WriteLine("Нажмите Ctrl+C для выхода.");
try
{
return parseResult.Invoke();
}
catch (Exception ex)
{
Console.Error.WriteLine("Ошибка при выполнении программы:");
Console.Write(ex.Message);
Console.Write(ex.StackTrace);
return 1;
}
}
/// <summary>
/// Если в <see cref="_args"/> присутствует аргумент <i>--debug</i>,
/// то удаляет <i>--debug</i> из <see cref="_args"/>, выводит информацию о процессе в консоль и ожидает подключения отладчика
/// </summary>
private static void WaitDebuggerIfNeeded()
{
if (System.Diagnostics.Debugger.IsAttached)
return;
if (!_args.Contains("--debug"))
return;
_args.Remove("--debug");
bool keepWaiting = true;
void CancelWait(object? _, ConsoleCancelEventArgs ea)
{
ea.Cancel = true;
keepWaiting = false;
Console.WriteLine("\nОперация отменена пользователем.");
Environment.Exit(0);
}
Console.CancelKeyPress += CancelWait;
Console.WriteLine("Ожидание подключения отладчика.");
Console.WriteLine($"Имя процесса: {Environment.ProcessPath}");
Console.WriteLine($"Id процесса: {Environment.ProcessId}");
Console.WriteLine($"Id потока: {Environment.CurrentManagedThreadId}");
Console.WriteLine("Нажмите Ctrl+C для выхода.");
while (!System.Diagnostics.Debugger.IsAttached && keepWaiting)
Thread.Sleep(100);
if (System.Diagnostics.Debugger.IsAttached)
System.Diagnostics.Debugger.Break();
Console.CancelKeyPress -= CancelWait;
}
}