/**
 * WebSocket 连接管理与消息传输工具
 */
/**
 * WebSocket 连接状态
 */
export declare enum WebSocketState {
    CONNECTING = "connecting",
    OPEN = "open",
    CLOSING = "closing",
    CLOSED = "closed",
    RECONNECTING = "reconnecting"
}
/**
 * 消息优先级
 */
export declare enum MessagePriority {
    HIGH = "high",// 高优先级，如用户交互相关
    NORMAL = "normal",// 普通优先级，默认
    LOW = "low"
}
/**
 * 心跳配置
 */
export interface HeartbeatConfig {
    /** 是否启用心跳 */
    enabled: boolean;
    /** 心跳间隔(ms) */
    interval: number;
    /** 心跳消息内容 */
    message: any;
    /** 心跳超时判定时间(ms) */
    timeout: number;
}
/**
 * 重连配置
 */
export interface ReconnectConfig {
    /** 是否启用自动重连 */
    enabled: boolean;
    /** 最大重试次数，-1表示无限 */
    maxRetries: number;
    /** 初始重连延迟(ms) */
    initialDelay: number;
    /** 最大重连延迟(ms) */
    maxDelay: number;
    /** 重试延迟系数（指数退避） */
    factor: number;
    /** 随机化系数(0-1) */
    jitter: number;
}
/**
 * 消息处理配置
 */
export interface MessageConfig {
    /** 默认消息超时时间(ms) */
    timeout: number;
    /** 消息缓冲区大小 */
    maxQueueSize: number;
    /** 自动序列化JSON */
    autoJsonStringify: boolean;
    /** 自动反序列化JSON */
    autoJsonParse: boolean;
    /** 批处理阈值（达到多少消息一起发送） */
    batchThreshold: number;
    /** 批处理时间窗口(ms) */
    batchTimeWindow: number;
}
/**
 * WebSocket 配置选项
 */
export interface WebSocketOptions {
    /** websocket 连接地址 */
    url: string;
    /** 传递给WebSocket构造函数的协议参数 */
    protocols?: string | string[];
    /** 自定义请求头（仅适用于某些实现） */
    headers?: Record<string, string>;
    /** 连接超时(ms) */
    connectionTimeout?: number;
    /** 心跳配置 */
    heartbeat?: Partial<HeartbeatConfig>;
    /** 重连配置 */
    reconnect?: Partial<ReconnectConfig>;
    /** 消息处理配置 */
    message?: Partial<MessageConfig>;
    /** 调试模式 */
    debug?: boolean;
    /** 认证令牌 */
    authToken?: string;
    /** 认证处理器 */
    authHandler?: (socket: WebSocketClient) => Promise<void>;
    /** 消息处理器 */
    messageHandler?: (data: any, socket: WebSocketClient) => void;
}
/**
 * 消息发送配置
 */
export interface SendOptions {
    /** 消息ID */
    id?: string;
    /** 期望响应 */
    expectResponse?: boolean;
    /** 响应超时(ms) */
    timeout?: number;
    /** 重试次数 */
    retries?: number;
    /** 重试延迟(ms) */
    retryDelay?: number;
    /** 消息优先级 */
    priority?: MessagePriority;
    /** 离线时是否缓存消息 */
    cacheIfOffline?: boolean;
    /** 强制文本格式发送JSON */
    forceText?: boolean;
    /** 是否作为二进制发送 */
    binary?: boolean;
}
/**
 * WebSocket 客户端
 */
export declare class WebSocketClient {
    private socket;
    private state;
    private messageQueue;
    private pendingMessages;
    private reconnectAttempts;
    private reconnectTimer;
    private heartbeatTimer;
    private heartbeatTimeoutTimer;
    private batchTimer;
    private batchedMessages;
    private eventListeners;
    private connectionStartTime;
    private lastMessageTime;
    private metrics;
    private readonly defaultHeartbeatConfig;
    private readonly defaultReconnectConfig;
    private readonly defaultMessageConfig;
    private options;
    private heartbeatConfig;
    private reconnectConfig;
    private messageConfig;
    /**
     * 创建WebSocket客户端实例
     * @param options WebSocket配置选项
     */
    constructor(options: WebSocketOptions);
    /**
     * 连接到WebSocket服务器
     * @returns 连接Promise
     */
    connect(): Promise<WebSocketClient>;
    /**
     * 关闭WebSocket连接
     * @param code 关闭代码
     * @param reason 关闭原因
     */
    close(code?: number, reason?: string): void;
    /**
     * 发送消息
     * @param data 要发送的数据
     * @param options 发送选项
     * @returns 如果expectResponse为true，则返回响应数据的Promise
     */
    send(data: any, options?: SendOptions): Promise<any>;
    /**
     * 订阅WebSocket事件
     * @param event 事件名称
     * @param listener 监听器函数
     * @returns this 实例，用于链式调用
     */
    on(event: string, listener: Function): this;
    /**
     * 取消订阅WebSocket事件
     * @param event 事件名称
     * @param listener 监听器函数
     * @returns this 实例，用于链式调用
     */
    off(event: string, listener: Function): this;
    /**
     * 获取当前WebSocket状态
     * @returns 当前状态
     */
    getState(): WebSocketState;
    /**
     * 获取延迟时间 (从最后一次心跳响应计算)
     * @returns 延迟时间 (ms)
     */
    getLatency(): number;
    /**
     * 获取连接统计信息
     * @returns 统计指标
     */
    getMetrics(): {
        messagesSent: number;
        messagesReceived: number;
        bytesReceived: number;
        bytesSent: number;
        errors: number;
        reconnects: number;
    };
    /**
     * 清除消息队列
     */
    clearQueue(): void;
    /**
     * 检查连接是否活跃
     * @returns 是否为活跃连接
     */
    isConnected(): boolean;
    /**
     * 手动触发重连
     * @returns 重连Promise
     */
    reconnect(): Promise<WebSocketClient>;
    /**
     * 触发事件
     * @param event 事件名称
     * @param data 事件数据
     */
    private emit;
    /**
     * 设置WebSocket状态
     * @param state 新状态
     */
    private setState;
    /**
     * 生成唯一消息ID
     * @returns 唯一ID
     */
    private generateId;
    /**
     * 发送实际的WebSocket消息
     * @param message 消息对象
     */
    private sendMessage;
    /**
     * 将消息添加到队列
     * @param message 消息对象
     */
    private queueMessage;
    /**
     * 处理队列中的消息
     */
    private processPendingMessages;
    /**
     * 将消息添加到批处理
     * @param message 消息对象
     */
    private addToBatch;
    /**
     * 发送批处理消息
     */
    private flushBatchMessages;
    /**
     * 启动心跳
     */
    private startHeartbeat;
    /**
     * 发送心跳
     */
    private sendHeartbeat;
    /**
     * 处理心跳响应
     * @param data 响应数据
     */
    private handleHeartbeatResponse;
    /**
     * 停止心跳
     */
    private stopHeartbeat;
    /**
     * 处理连接失败
     */
    private handleConnectionFailure;
    /**
     * 处理重连逻辑
     * @param immediate 是否立即重连
     * @returns 重连Promise
     */
    private handleReconnect;
    /**
     * 计算重连延迟时间
     * @returns 延迟时间 (ms)
     */
    private calculateReconnectDelay;
    /**
     * 清理Socket资源
     */
    private cleanupSocket;
    /**
     * 停止重连尝试
     */
    private stopReconnect;
    /**
     * 拒绝所有等待的消息
     * @param reason 拒绝原因
     */
    private rejectAllPendingMessages;
    /**
     * 记录日志
     * @param level 日志级别
     * @param message 日志消息
     * @param error 错误对象（可选）
     */
    private log;
    /**
     * 获取连接统计信息
     * @returns 统计信息对象
     */
    getConnectionStats(): {
        uptime: number;
        messagesSent: number;
        messagesReceived: number;
        bytesSent: number;
        bytesReceived: number;
        errors: number;
        reconnects: number;
        latency: number;
        queueSize: number;
        pendingResponses: number;
    };
    /**
     * 重置统计信息
     */
    resetStats(): void;
    /**
     * 设置心跳配置
     * @param config 心跳配置
     */
    setHeartbeatConfig(config: Partial<HeartbeatConfig>): void;
    /**
     * 设置重连配置
     * @param config 重连配置
     */
    setReconnectConfig(config: Partial<ReconnectConfig>): void;
    /**
     * 设置消息配置
     * @param config 消息配置
     */
    setMessageConfig(config: Partial<MessageConfig>): void;
    /**
     * 获取当前配置
     * @returns 当前配置对象
     */
    getConfig(): {
        heartbeat: HeartbeatConfig;
        reconnect: ReconnectConfig;
        message: MessageConfig;
    };
    /**
     * 销毁WebSocket客户端
     */
    destroy(): void;
}
