using MxGateway.Contracts.Proto; namespace MxGateway.Server.Sessions; public interface ISessionManager { Task OpenSessionAsync( SessionOpenRequest request, string? clientIdentity, CancellationToken cancellationToken); bool TryGetSession( string sessionId, out GatewaySession session); Task InvokeAsync( string sessionId, WorkerCommand command, CancellationToken cancellationToken); IAsyncEnumerable ReadEventsAsync( string sessionId, CancellationToken cancellationToken); Task CloseSessionAsync( string sessionId, CancellationToken cancellationToken); Task CloseExpiredLeasesAsync( DateTimeOffset now, CancellationToken cancellationToken); Task ShutdownAsync(CancellationToken cancellationToken); }