Files
timetracker/timetracker.Client/Services/UserNotificationService.cs
T
2026-06-08 16:24:51 +02:00

57 lines
1.5 KiB
C#

using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.SignalR.Client;
using timetracker.Shared;
namespace timetracker.Client.Services;
public class UserNotificationService : IUserNotificationService, IAsyncDisposable
{
private readonly HubConnection _hubConnection;
public event Func<Task>? OnUsersChanged;
public event Func<int, Task>? OnUserDeleted;
public UserNotificationService(NavigationManager navigationManager)
{
_hubConnection = new HubConnectionBuilder()
.WithUrl(navigationManager.ToAbsoluteUri("/hubs/notifications"))
.WithAutomaticReconnect()
.Build();
_hubConnection.On("UsersChanged", async () =>
{
if (OnUsersChanged != null)
await OnUsersChanged.Invoke();
});
_hubConnection.On<int>("UserDeleted", async (userId) =>
{
if (OnUserDeleted != null)
await OnUserDeleted.Invoke(userId);
});
// Start connection asynchronously
_ = StartHubConnectionAsync();
}
private async Task StartHubConnectionAsync()
{
try
{
await _hubConnection.StartAsync();
}
catch (Exception ex)
{
Console.WriteLine($"SignalR Connection Error: {ex.Message}");
}
}
public async ValueTask DisposeAsync()
{
if (_hubConnection != null)
{
await _hubConnection.DisposeAsync();
}
}
}