solver-sdk
Version:
SDK для интеграции с Code Solver Backend API
118 lines • 5.91 kB
TypeScript
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