ChatHubService.cs 942 B

123456789101112131415161718192021222324252627282930
  1. using Application.Abstractions.Chat;
  2. using Microsoft.AspNetCore.SignalR;
  3. namespace Web.Api.Hubs;
  4. public sealed class ChatHubService(
  5. IHubContext<ChatHub, IChatHubClient> hubContext, IChatConnectionTracker tracker
  6. ) : IChatHubService {
  7. public async Task BroadcastMessageAsync(ChatMessage message, CancellationToken ct = default)
  8. {
  9. await hubContext.Clients.All.ReceiveMessage(message);
  10. }
  11. public async Task BroadcastSystemMessageAsync(string message, CancellationToken ct = default)
  12. {
  13. await hubContext.Clients.All.ReceiveSystemMessage(message);
  14. }
  15. public async Task KickUserAsync(int memberID, CancellationToken ct = default)
  16. {
  17. var all = await tracker.GetAllAsync();
  18. var ids = all.Where(x => x.MemberID == memberID).Select(x => x.ConnectionId).ToList();
  19. foreach (var id in ids)
  20. {
  21. await hubContext.Clients.Client(id).Kick();
  22. }
  23. }
  24. }