Umfassende Umstrukturierung der SlipItIn-App für eine moderne, zustandsbasierte und SignalR-gestützte Multiplayer-Architektur. Einführung neuer Services für Auth, API, SignalR, lokalen Speicher und Game-State-Management via Dependency Injection. Komplette Neugestaltung der Views (Login, Registrierung, Lobby, Spielbrett) mit MVVM und CommunityToolkit.Mvvm. Navigation jetzt über MAUI Shell mit expliziten Routen. Game-Logik auf Events/Messaging umgestellt, UI und Logik entkoppelt, Echtzeit-Updates integriert. SignalR für alle Spielaktionen inkl. Wiederverbindung und Offline-Queueing. Lokaler Speicher für Auth, Userdaten, GameState und Aktionen. MainPage entfernt, neue Views implementiert. Projektdatei um NuGet-Pakete und Shared-Projekt erweitert. Backend-Änderungen für direkte Spieler-Zuordnung und korrekte EF Core-Relationen. App ist nun robust, testbar und unterstützt Multiplayer- sowie Offline-Szenarien.
34 lines
733 B
C#
34 lines
733 B
C#
using CommunityToolkit.Mvvm.ComponentModel;
|
|
|
|
namespace SlipItIn.ViewModels;
|
|
|
|
public abstract partial class BaseViewModel : ObservableRecipient
|
|
{
|
|
[ObservableProperty]
|
|
public partial bool IsBusy { get; set; }
|
|
|
|
[ObservableProperty]
|
|
public partial string StatusMessage { get; set; }
|
|
|
|
protected async Task RunSafeAsync(Func<Task> action, string? busyMessage = null)
|
|
{
|
|
if (IsBusy)
|
|
return;
|
|
|
|
try
|
|
{
|
|
IsBusy = true;
|
|
StatusMessage = busyMessage ?? string.Empty;
|
|
await action();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
StatusMessage = ex.Message;
|
|
}
|
|
finally
|
|
{
|
|
IsBusy = false;
|
|
}
|
|
}
|
|
}
|