import { WebSocketNamespace } from '../constants/websocket-namespaces.constants.js';
import { WebSocketClient } from './websocket-client.js';
import { Logger } from './logger.js';
import { PingPongStats } from '../interfaces/websocket/stats.interfaces.js';
/**
 * Опции для менеджера ping/pong
 */
export interface PingPongManagerOptions {
    /** Интервал между ping-сообщениями в миллисекундах */
    pingInterval?: number;
    /** Количество пропущенных pong-ответов до признания соединения потерянным */
    pingTimeoutThreshold?: number;
    /** Логгер для вывода сообщений */
    logger?: Logger;
}
/**
 * Обработчик для событий ping/pong
 */
export type PingPongEventHandler = (data: any) => void;
/**
 * Класс для управления механизмом ping/pong
 */
export declare class PingPongManager {
    /** Интервал между ping-сообщениями в миллисекундах */
    private readonly pingInterval;
    /** Количество пропущенных pong-ответов до признания соединения потерянным */
    private readonly pingTimeoutThreshold;
    /** Логгер для вывода сообщений */
    private readonly logger;
    /** Таймеры для ping/pong */
    private readonly pingIntervals;
    /** Статистика ping/pong */
    private readonly pingStats;
    /** Количество последовательных таймаутов */
    private readonly pingTimeouts;
    /** Хранилище обработчиков ping/pong */
    private readonly pingPongEventHandlers;
    /** Клиенты WebSocket по namespace */
    private readonly clients;
    /**
     * Создает новый менеджер ping/pong
     * @param {PingPongManagerOptions} options Опции менеджера ping/pong
     */
    constructor(options?: PingPongManagerOptions);
    /**
     * Регистрирует WebSocket клиент для указанного пространства имен
     * @param {WebSocketNamespace} namespace Пространство имен
     * @param {WebSocketClient} client WebSocket клиент
     */
    registerClient(namespace: WebSocketNamespace, client: WebSocketClient): void;
    /**
     * Удаляет регистрацию WebSocket клиента для указанного пространства имен
     * @param {WebSocketNamespace} namespace Пространство имен
     */
    unregisterClient(namespace: WebSocketNamespace): void;
    /**
     * Создает обработчик для события pong
     * @param {WebSocketNamespace} namespace Пространство имен
     * @returns {PingPongEventHandler} Обработчик события pong
     */
    private createPongHandler;
    /**
     * Уведомляет обработчики о событии
     * @param {string} eventType Тип события
     * @param {any} data Данные события
     */
    private notifyEventHandlers;
    /**
     * Включает автоматическую отправку ping-сообщений
     * @param {WebSocketNamespace} namespace Пространство имен
     * @returns {boolean} true, если механизм успешно включен
     */
    enablePingPong(namespace: WebSocketNamespace): boolean;
    /**
     * Проверяет таймаут для ping/pong
     * @param {WebSocketNamespace} namespace Пространство имен
     */
    private checkPingTimeout;
    /**
     * Отключает автоматическую отправку ping-сообщений
     * @param {WebSocketNamespace} namespace Пространство имен
     */
    disablePingPong(namespace: WebSocketNamespace): void;
    /**
     * Отключает автоматическую отправку ping-сообщений для всех пространств имен
     */
    disablePingPongAll(): void;
    /**
     * Получает статистику ping/pong для указанного пространства имен
     * @param {WebSocketNamespace} namespace Пространство имен
     * @returns {PingPongStats | null} Статистика ping/pong
     */
    getPingStats(namespace: WebSocketNamespace): PingPongStats | null;
    /**
     * Получает статистику ping/pong для всех пространств имен
     * @returns {PingPongStats[]} Массив статистики ping/pong
     */
    getAllPingStats(): PingPongStats[];
    /**
     * Добавляет обработчик для событий ping/pong
     * @param {string} eventType Тип события (connection_timeout, connection_pong)
     * @param {PingPongEventHandler} handler Обработчик события
     */
    onPingPongEvent(eventType: string, handler: PingPongEventHandler): void;
    /**
     * Удаляет обработчик для событий ping/pong
     * @param {string} eventType Тип события
     * @param {PingPongEventHandler} [handler] Обработчик события (если не указан, удаляются все обработчики)
     */
    offPingPongEvent(eventType: string, handler?: PingPongEventHandler): void;
    /**
     * Проверяет, включен ли механизм ping/pong для указанного пространства имен
     * @param {WebSocketNamespace} namespace Пространство имен
     * @returns {boolean} true, если механизм включен
     */
    isPingPongEnabled(namespace: WebSocketNamespace): boolean;
}
//# sourceMappingURL=ping-pong-manager.d.ts.map