namespace Application.Abstractions.Hub;
///
/// SignalR AppHub 접속자 추적 (Redis 기반).
/// 한 멤버가 여러 탭/디바이스 접속 가능 → connectionId refcount 패턴.
///
public interface IPresenceTracker
{
/// 새 SignalR connection 등록. 첫 connection이면 online set에 추가. 반환값: true = 0→1 전환(첫 접속).
Task AddConnectionAsync(int memberID, string connectionId);
/// SignalR disconnect 처리. 마지막 connection이면 online set에서 제거. 반환값: true = 1→0 전환(완전 종료).
Task RemoveConnectionAsync(int memberID, string connectionId);
/// 특정 멤버 온라인 여부.
Task IsOnlineAsync(int memberID);
/// 여러 멤버의 온라인 ID 집합 일괄 조회.
Task> GetOnlineMembersAsync(IEnumerable memberIDs);
/// Web.Api 시작 시 stale presence 데이터(고아 connectionId, online set) 일괄 정리. 모든 SignalR 클라이언트는 재연결 시 OnConnected로 재등록됨.
Task ClearAllAsync();
}