using System; using System.Threading.Tasks; using API.Extensions; using API.SignalR.Presence; using Microsoft.AspNetCore.SignalR; namespace API.SignalR { /// /// Keeps track of who is logged into the app /// public class PresenceHub : Hub { private readonly IPresenceTracker _tracker; public PresenceHub(IPresenceTracker tracker) { _tracker = tracker; } public override async Task OnConnectedAsync() { await _tracker.UserConnected(Context.User.GetUsername(), Context.ConnectionId); var currentUsers = await PresenceTracker.GetOnlineUsers(); await Clients.All.SendAsync("GetOnlineUsers", currentUsers); } public override async Task OnDisconnectedAsync(Exception exception) { await _tracker.UserDisconnected(Context.User.GetUsername(), Context.ConnectionId); var currentUsers = await PresenceTracker.GetOnlineUsers(); await Clients.All.SendAsync("GetOnlineUsers", currentUsers); await base.OnDisconnectedAsync(exception); } } }