DonationHub.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using Application.Abstractions.Hub;
  2. using Microsoft.AspNetCore.SignalR;
  3. using Microsoft.Extensions.Logging;
  4. namespace Infrastructure.Hubs;
  5. /// <summary>
  6. /// 후원 전용 Hub — OBS 위젯, 리모콘 전용
  7. /// 채널 SID 기반 그룹으로 분리
  8. /// </summary>
  9. public sealed class DonationHub(
  10. ILogger<DonationHub> logger
  11. ) : Hub<IDonationHubClient>
  12. {
  13. public override async Task OnConnectedAsync()
  14. {
  15. logger.LogInformation("[DonationHub] Connected: {ConnectionId}", Context.ConnectionId);
  16. await base.OnConnectedAsync();
  17. }
  18. public override async Task OnDisconnectedAsync(Exception? exception)
  19. {
  20. logger.LogInformation("[DonationHub] Disconnected: {ConnectionId}", Context.ConnectionId);
  21. await base.OnDisconnectedAsync(exception);
  22. }
  23. /// <summary>채널 그룹 참가 (OBS 위젯, 리모콘에서 호출)</summary>
  24. public async Task JoinChannel(string widgetToken)
  25. {
  26. await Groups.AddToGroupAsync(Context.ConnectionId, widgetToken);
  27. logger.LogInformation("[DonationHub] {ConnectionId} joined group {WidgetToken}", Context.ConnectionId, widgetToken);
  28. }
  29. /// <summary>채널 그룹 퇴장</summary>
  30. public async Task LeaveChannel(string widgetToken)
  31. {
  32. await Groups.RemoveFromGroupAsync(Context.ConnectionId, widgetToken);
  33. }
  34. /// <summary>OBS 위젯에서 알림 전달 완료 보고</summary>
  35. public async Task AlertDelivered(int alertID)
  36. {
  37. // Handler에서 처리 — 여기서는 이벤트만 전달
  38. logger.LogInformation("[DonationHub] AlertDelivered: {AlertID}", alertID);
  39. }
  40. /// <summary>OBS 위젯에서 알림 전달 실패 보고</summary>
  41. public async Task AlertFailed(int alertID, string reason)
  42. {
  43. logger.LogWarning("[DonationHub] AlertFailed: {AlertID} — {Reason}", alertID, reason);
  44. }
  45. }