Kavita/API/SignalR/MessageHub.cs
Joe Milazzo 9f29fa593d
Progress Overhaul + Profile Page and a LOT more! (#4262)
Co-authored-by: Amelia <77553571+Fesaa@users.noreply.github.com>
Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
2025-12-09 10:00:11 -07:00

50 lines
1.2 KiB
C#

using System;
using System.Threading.Tasks;
using API.Extensions;
using API.Middleware;
using API.SignalR.Presence;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;
namespace API.SignalR;
#nullable enable
/// <summary>
/// Generic hub for sending messages to UI
/// </summary>
[Authorize]
[SkipDeviceTracking]
public class MessageHub : Hub
{
private readonly IPresenceTracker _tracker;
public MessageHub(IPresenceTracker tracker)
{
_tracker = tracker;
}
public override async Task OnConnectedAsync()
{
var userId = Context.User!.GetUserId();
await _tracker.UserConnected(userId, Context.ConnectionId);
var currentUsers = await PresenceTracker.GetOnlineUsers();
await Clients.All.SendAsync(MessageFactory.OnlineUsers, currentUsers);
await base.OnConnectedAsync();
}
public override async Task OnDisconnectedAsync(Exception? exception)
{
await _tracker.UserDisconnected(Context.User!.GetUserId(), Context.ConnectionId);
var currentUsers = await PresenceTracker.GetOnlineUsers();
await Clients.All.SendAsync(MessageFactory.OnlineUsers, currentUsers);
await base.OnDisconnectedAsync(exception);
}
}