UNPKG

solver-sdk

Version:

SDK для интеграции с Code Solver Backend API

118 lines 5.91 kB
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