import { WebSocketNamespace } from '../constants/websocket-namespaces.constants.js';
import { Logger } from './logger.js';
/**
 * Состояние подключения
 */
export interface ConnectionState {
    /** Время последнего успешного подключения */
    lastConnectTime: number;
    /** Количество попыток переподключения */
    reconnectAttempts: number;
    /** Состояние подключения */
    connected: boolean;
    /** Состояние процесса переподключения */
    reconnecting: boolean;
}
/**
 * Опции для менеджера состояния подключения
 */
export interface ConnectionStateManagerOptions {
    /** Стратегия задержки между попытками переподключения */
    reconnectStrategy?: 'linear' | 'exponential';
    /** Базовая задержка для переподключения в миллисекундах */
    retryDelay?: number;
    /** Максимальная задержка для переподключения в миллисекундах */
    maxRetryDelay?: number;
    /** Логгер для вывода сообщений */
    logger?: Logger;
}
/**
 * Класс для управления состоянием подключений
 */
export declare class ConnectionStateManager {
    /** Стратегия задержки между попытками переподключения */
    private readonly reconnectStrategy;
    /** Базовая задержка для переподключения в миллисекундах */
    private readonly retryDelay;
    /** Максимальная задержка для переподключения в миллисекундах */
    private readonly maxRetryDelay;
    /** Логгер для вывода сообщений */
    private readonly logger;
    /** Хранилище состояний подключений */
    private readonly states;
    /**
     * Создает новый менеджер состояния подключений
     * @param {ConnectionStateManagerOptions} options Опции менеджера состояния подключений
     */
    constructor(options?: ConnectionStateManagerOptions);
    /**
     * Получает состояние подключения для указанного пространства имен
     * @param {WebSocketNamespace} namespace Пространство имен
     * @returns {ConnectionState} Состояние подключения
     */
    getState(namespace: WebSocketNamespace): ConnectionState;
    /**
     * Устанавливает состояние подключения для указанного пространства имен
     * @param {WebSocketNamespace} namespace Пространство имен
     * @param {boolean} connected Состояние подключения
     * @param {boolean} reconnecting Состояние переподключения
     */
    setConnectionState(namespace: WebSocketNamespace, connected: boolean, reconnecting?: boolean): void;
    /**
     * Увеличивает счетчик попыток переподключения для указанного пространства имен
     * @param {WebSocketNamespace} namespace Пространство имен
     * @returns {number} Новое количество попыток
     */
    incrementReconnectAttempts(namespace: WebSocketNamespace): number;
    /**
     * Рассчитывает задержку для переподключения на основе количества попыток и стратегии
     * @param {WebSocketNamespace} namespace Пространство имен
     * @returns {number} Задержка в миллисекундах
     */
    calculateReconnectDelay(namespace: WebSocketNamespace): number;
    /**
     * Сбрасывает счетчик попыток переподключения для указанного пространства имен
     * @param {WebSocketNamespace} namespace Пространство имен
     */
    resetReconnectAttempts(namespace: WebSocketNamespace): void;
    /**
     * Регистрирует успешное подключение
     * @param {WebSocketNamespace} namespace Пространство имен
     */
    registerSuccessfulConnection(namespace: WebSocketNamespace): void;
    /**
     * Регистрирует отключение
     * @param {WebSocketNamespace} namespace Пространство имен
     */
    registerDisconnection(namespace: WebSocketNamespace): void;
    /**
     * Регистрирует начало процесса переподключения
     * @param {WebSocketNamespace} namespace Пространство имен
     */
    registerReconnecting(namespace: WebSocketNamespace): void;
}
//# sourceMappingURL=connection-state-manager.d.ts.map