- JWT-Authentifizierung prüft nun, ob User aktiv und existent ist - Session-Validierung beim App-Start via ValidateSessionAsync - Ungültige Sessions werden entfernt, SignalR-Verbindung getrennt - ApiService und IApiService um ValidateSessionAsync erweitert - LoginViewModel nutzt Session-Check und behandelt SignalR-Fehler - UI für eigene Phrasen auf <Border> mit Stil-Anpassung umgestellt
65 lines
1.5 KiB
C#
65 lines
1.5 KiB
C#
using SlipItIn.Infrastructure;
|
|
using SlipItIn.Services.Interfaces;
|
|
|
|
namespace SlipItIn;
|
|
|
|
public partial class App : Application
|
|
{
|
|
public App()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
protected override Window CreateWindow(IActivationState? activationState)
|
|
{
|
|
var window = new Window(new AppShell());
|
|
|
|
window.Created += async (_, _) =>
|
|
{
|
|
await InitializeSafeAsync();
|
|
};
|
|
|
|
window.Resumed += async (_, _) =>
|
|
{
|
|
var gameStateService = ServiceHelper.GetRequiredService<IGameStateService>();
|
|
await gameStateService.ResyncAsync();
|
|
};
|
|
|
|
return window;
|
|
}
|
|
|
|
private static async Task InitializeSafeAsync()
|
|
{
|
|
try
|
|
{
|
|
var authSession = ServiceHelper.GetRequiredService<IAuthSessionService>();
|
|
var signalR = ServiceHelper.GetRequiredService<ISignalRService>();
|
|
var gameStateService = ServiceHelper.GetRequiredService<IGameStateService>();
|
|
var apiService = ServiceHelper.GetRequiredService<IApiService>();
|
|
|
|
await authSession.InitializeAsync();
|
|
await gameStateService.InitializeAsync();
|
|
|
|
if (string.IsNullOrWhiteSpace(authSession.AccessToken))
|
|
return;
|
|
|
|
var isSessionValid = await apiService.ValidateSessionAsync();
|
|
if (!isSessionValid)
|
|
{
|
|
await authSession.ClearSessionAsync();
|
|
await gameStateService.ClearLocalGameDataAsync();
|
|
await signalR.DisconnectAsync();
|
|
return;
|
|
}
|
|
|
|
var connected = await signalR.ConnectAsync(authSession.AccessToken);
|
|
if (connected)
|
|
await gameStateService.ResyncAsync();
|
|
}
|
|
catch
|
|
{
|
|
// Start darf nicht abstürzen, wenn Session/Netzwerk fehlschlägt.
|
|
}
|
|
}
|
|
}
|