Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/Infrastructure/Hubs/Constants.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public static class SignalR
public const string SendUpdateDashboard = "UpdateDashboard";
public const string SendNotification = "SendNotification";
public const string SendMessage = "SendMessage";
public const string SendPrivateMessage = "SendPrivateMessage";
public const string OnConnect = "Connect";
public const string OnDisconnect = "Disconnect";
public const string OnChangeRolePermissions = "OnChangeRolePermissions";
Expand Down
8 changes: 7 additions & 1 deletion src/Infrastructure/Hubs/HubClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ public HubClient(NavigationManager navigationManager, AccessTokenProvider authPr
.Build();
_hubConnection.ServerTimeout = TimeSpan.FromSeconds(30);
_hubConnection.On<string>(SignalR.OnConnect, userId => { Login?.Invoke(this, userId); });

_hubConnection.On<string>(SignalR.OnDisconnect, userId => { Logout?.Invoke(this, userId); });
_hubConnection.On<string>(SignalR.SendNotification,
message => { NotificationReceived?.Invoke(this, message); });
_hubConnection.On<string, string>(SignalR.SendMessage, HandleReceiveMessage);
_hubConnection.On<string, string, string>(SignalR.SendPrivateMessage, HandleReceivePrivateMessage);
_hubConnection.On<string>(SignalR.JobCompleted, message => { JobCompleted?.Invoke(this, message); });
_hubConnection.On<string>(SignalR.JobStart, message => { JobStarted?.Invoke(this, message); });
}
Expand Down Expand Up @@ -61,6 +61,12 @@ private void HandleReceiveMessage(string from, string message)
MessageReceived?.Invoke(this, new MessageReceivedEventArgs(from, message));
}

private void HandleReceivePrivateMessage(string from, string to, string message)
{
// raise an event to subscribers
MessageReceived?.Invoke(this, new MessageReceivedEventArgs(from, message));
}

public async Task SendAsync(string message)
{
await _hubConnection.SendAsync(SignalR.SendMessage, message);
Expand Down
26 changes: 10 additions & 16 deletions src/Infrastructure/Hubs/SignalRHub.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public interface ISignalRHub
Task Start(string message);
Task Completed(string message);
Task SendMessage(string from, string message);
Task SendMessage(string from, string to, string message);
Task SendPrivateMessage(string from, string to, string message);
Task Disconnect(string userId);
Task Connect(string userId);
Task SendNotification(string message);
Expand All @@ -26,39 +26,33 @@ public class SignalRHub : Hub<ISignalRHub>

public override async Task OnConnectedAsync()
{
string id = Context.ConnectionId;
string username = Context.User?.Identity?.Name ?? string.Empty;
if (!OnlineUsers.ContainsKey(id))
{
OnlineUsers.TryAdd(id, username);
}
var id = Context.ConnectionId;
var username = Context.User?.Identity?.Name ?? string.Empty;
if (!OnlineUsers.ContainsKey(id)) OnlineUsers.TryAdd(id, username);

await Clients.All.Connect(username);
await base.OnConnectedAsync();
}

public override async Task OnDisconnectedAsync(Exception? exception)
{
string id = Context.ConnectionId;
var id = Context.ConnectionId;
//try to remove key from dictionary
if (OnlineUsers.TryRemove(id, out string? username))
{
await Clients.All.Disconnect(username);
}
if (OnlineUsers.TryRemove(id, out var username)) await Clients.All.Disconnect(username);

await base.OnConnectedAsync();
}

public async Task SendMessage(string message)
{
string username = Context.User?.Identity?.Name ?? string.Empty;
var username = Context.User?.Identity?.Name ?? string.Empty;
await Clients.All.SendMessage(username, message);
}

public async Task SendMessage(string to, string message)
public async Task SendPrivateMessage(string to, string message)
{
string username = Context.User?.Identity?.Name ?? string.Empty;
await Clients.User(to).SendMessage(username, message);
var username = Context.User?.Identity?.Name ?? string.Empty;
await Clients.User(to).SendPrivateMessage(username, to, message);
}

public async Task SendNotification(string message)
Expand Down