using Microsoft.AspNetCore.SignalR.Client; using TIAMWebApp.Shared.Application.Models.ClientSide; namespace TIAMWebApp.Shared.Application.Services { public class SignalRService { private HubConnection _hubConnection; public event Action OnMessageReceived; public event Action OnUserMuted; public event Action OnUserLoggedIn; public event Action OnUserLoggedOut; public async Task StartConnection(string userName) { _hubConnection = new HubConnectionBuilder() .WithUrl($"{Setting.BaseUrl}/TiamChatHub") .Build(); _hubConnection.On("ReceiveMessage", (user, message) => { OnMessageReceived?.Invoke(user, message); }); _hubConnection.On("UserMuted", (user) => { OnUserMuted?.Invoke(user); }); _hubConnection.On("UserLoggedInToChat", (user) => { OnUserLoggedIn?.Invoke(user); }); _hubConnection.On("UserLoggedOutFromChat", (user) => { OnUserLoggedOut?.Invoke(user); }); await _hubConnection.StartAsync(); await LoggedInToChat(userName); } public async Task SendMessage(string user, string message) { await _hubConnection.SendAsync("SendMessage", user, message); } public async Task MuteChat(string user) { await _hubConnection.SendAsync("MuteChat", user); } public async Task LoggedInToChat(string user) { await _hubConnection.SendAsync("LoggedInToChat", user); } public async Task LoggedOutFromChat(string user) { await _hubConnection.SendAsync("LoggedOutFromChat", user); } public async Task StopConnection() { await _hubConnection.StopAsync(); await _hubConnection.DisposeAsync(); } } }