corp-app/CORP-MAUI/AppShell.xaml.cs

110 lines
4.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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");
}
}
}