using FaceRecognitionApp.Hubs; using FaceRecognitionApp.Services; using Microsoft.AspNetCore.SignalR; var builder = WebApplication.CreateBuilder(args); // Регистрация сервисов builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSignalR(); var app = builder.Build(); // 1. Включаем поиск файлов по умолчанию (index.html, default.html и т.д.) app.UseDefaultFiles(); // 2. Включаем раздачу статических файлов (css, js, картинки) app.UseStaticFiles(); // 3. Подключаем SignalR хаб app.MapHub("/faceHub"); // Инициализация камеры и распознавания var db = app.Services.GetRequiredService(); var faceService = app.Services.GetRequiredService(); // URL камеры (замените на свой или используйте тестовый видеофайл) var cameraUrl = Environment.GetEnvironmentVariable("CAMERA_URL") ?? "rtsp://admin:4NUDZhJ7@172.22.10.101:554/cam/realmonitor?channel=1&subtype=1"; try { Console.WriteLine($"Connecting to camera: {cameraUrl}..."); var camera = new CameraService(cameraUrl, faceService, async (face) => { var hub = app.Services.GetRequiredService>(); await hub.Clients.All.SendAsync("NewFace", new { image = Convert.ToBase64String(face.ImageData), isRecognized = face.IsRecognized, name = face.MatchedEmployee?.Name ?? "Unknown" }); }); camera.Start(); Console.WriteLine("✅ Camera service started."); // Корректное завершение работы камеры при остановке приложения app.Lifetime.ApplicationStopping.Register(() => { Console.WriteLine("Shutting down camera..."); camera.Dispose(); }); } catch (Exception ex) { Console.WriteLine($"⚠️ Camera Error: {ex.Message}"); Console.WriteLine("Application will run without camera monitoring."); } Console.WriteLine("🚀 Application is ready. Open http://localhost:5290 in your browser."); app.Run();