using System.Diagnostics; using CORP_MAUI.Pages; namespace CORP_MAUI; public partial class AppShell : Shell { public AppShell() { try { Trace.WriteLine("=== APPSHELL CONSTRUCTOR START ==="); Trace.WriteLine("[AppShell] >>> Вызов InitializeComponent"); InitializeComponent(); Trace.WriteLine("[AppShell] >>> InitializeComponent завершен"); Trace.WriteLine("[AppShell] >>> Регистрация маршрутов"); // Регистрация маршрутов для навигации Routing.RegisterRoute(nameof(ChatPage), typeof(ChatPage)); Trace.WriteLine("[AppShell] ✅ AppShell инициализирован"); Trace.WriteLine("=== APPSHELL CONSTRUCTOR END ==="); // Инициализация без ожидания (так await нельзя из синхронного конструктора) _ = InitializeAsync(); } catch (Exception ex) { Trace.WriteLine("=== APPSHELL CONSTRUCTOR ERROR ==="); Trace.WriteLine($"[AppShell] ❌ Тип ошибки: {ex.GetType().FullName}"); Trace.WriteLine($"[AppShell] ❌ Сообщение: {ex.Message}"); Trace.WriteLine($"[AppShell] ❌ StackTrace: {ex.StackTrace}"); if (ex.InnerException != null) { Trace.WriteLine($"[AppShell] ❌ InnerException: {ex.InnerException.Message}"); Trace.WriteLine($"[AppShell] ❌ InnerException StackTrace: {ex.InnerException.StackTrace}"); } // Показываем ошибку в диалоге Task.Run(async () => { await Task.Delay(100); await MainThread.InvokeOnMainThreadAsync(async () => { Page? mainPage = Application.Current?.Windows[0]?.Page; if (mainPage != null) { await mainPage.DisplayAlert("Ошибка AppShell", $"Ошибка инициализации AppShell:\n{ex.Message}\n\nStackTrace:\n{ex.StackTrace}", "OK"); } }); }); throw; } } private async Task InitializeAsync() { try { Trace.WriteLine("[AppShell] >>> Начало InitializeAsync"); // Инициализация сервисов (если они не инициализированы) ServiceProvider.Initialize(); Trace.WriteLine($"[AppShell] IsAuthenticated: {ServiceProvider.ApiService.IsAuthenticated}"); // Проверяем, авторизован ли пользователь (токены загружаются автоматически в ApiService) if (ServiceProvider.ApiService.IsAuthenticated) { // Получаем токен для WebSocket string? accessToken = await SecureStorage.GetAsync("api.jwt_access"); Trace.WriteLine($"[AppShell] Access token exists: {!string.IsNullOrEmpty(accessToken)}"); Trace.WriteLine($"[AppShell] WebSocket connected: {ServiceProvider.WebSocketService.IsConnected}"); if (!string.IsNullOrEmpty(accessToken) && !ServiceProvider.WebSocketService.IsConnected) { Trace.WriteLine("[AppShell] >>> Подключение WebSocket из AppShell"); // Подключаем WebSocket только если его еще не подключен await ServiceProvider.WebSocketService.ConnectAsync(accessToken); Trace.WriteLine("[AppShell] ✅ WebSocket подключен из AppShell"); } else if (ServiceProvider.WebSocketService.IsConnected) { Trace.WriteLine("[AppShell] WebSocket уже подключен, пропускаем"); } } else { Trace.WriteLine("[AppShell] ⚠️ Пользователь не авторизован"); } Trace.WriteLine("[AppShell] ✅ InitializeAsync завершен"); } catch (Exception ex) { Trace.WriteLine($"[AppShell] ❌ Ошибка InitializeAsync: {ex.Message}"); Trace.WriteLine($"[AppShell] StackTrace: {ex.StackTrace}"); await DisplayAlert("Ошибка", $"Ошибка инициализации: {ex.Message}", "OK"); } } }