CrewHubBroadcaster.cs 778 B

1234567891011121314151617181920212223
  1. using Application.Abstractions.Hub;
  2. using Microsoft.AspNetCore.SignalR;
  3. namespace Infrastructure.Hubs;
  4. /// <summary>
  5. /// 크루원 변경 broadcast 구현체.
  6. /// FeedBroadcaster 와 동일하게 IHubContext 미주입(테스트/디자인 타임) 시 silent no-op.
  7. /// </summary>
  8. internal sealed class CrewHubBroadcaster(IHubContext<AppHub, IAppHubClient>? hub = null) : ICrewHubBroadcaster
  9. {
  10. public Task BroadcastMemberChangeAsync(int crewID, string kind, object data, CancellationToken ct = default)
  11. {
  12. if (hub is null || crewID <= 0 || string.IsNullOrWhiteSpace(kind))
  13. {
  14. return Task.CompletedTask;
  15. }
  16. return hub.Clients
  17. .Group($"crew:{crewID}")
  18. .ReceiveCrewMemberChange(new { kind, data });
  19. }
  20. }