using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.SignalR.Client; using Data.Models; using Components.Interfaces; namespace BlazorWebAssembly.Client.Services; public class BlazorWebAssemblyBlogNotificationService : IBlogNotificationService, IAsyncDisposable { public BlazorWebAssemblyBlogNotificationService(NavigationManager navigationManager) { _hubConnection = new HubConnectionBuilder() .WithUrl(navigationManager.ToAbsoluteUri("/BlogNotificationHub")) .Build(); _hubConnection.On("BlogPostChanged", (post) => { BlogPostChanged?.Invoke(post); }); _hubConnection.StartAsync(); } private readonly HubConnection _hubConnection; public event Action? BlogPostChanged; public async Task SendNotification(BlogPost post) { await _hubConnection.SendAsync("SendNotification", post); } public async ValueTask DisposeAsync() { await _hubConnection.DisposeAsync(); } }