/**
 * 信令模块 - 负责处理WebSocket连接和信令交换
 */
import { EventEmitter } from './utils/eventEmitter';
/**
 * 信令配置接口
 */
export interface SignalingConfig {
    url: string;
    autoReconnect?: boolean;
    reconnectInterval?: number;
    reconnectAttempts?: number;
}
/**
 * 信令消息类型
 */
export declare enum SignalingMessageType {
    JOIN = "join",
    LEAVE = "leave",
    OFFER = "offer",
    ANSWER = "answer",
    CANDIDATE = "candidate",
    KEEPALIVE = "keepalive",
    ERROR = "error"
}
/**
 * 信令消息接口
 */
export interface SignalingMessage {
    type: SignalingMessageType;
    payload: any;
    from?: string | number;
    to?: string | number | 'all';
    roomId?: string;
    timestamp?: number;
}
/**
 * 信令类 - 处理与信令服务器的通信
 */
export declare class Signaling extends EventEmitter {
    private config;
    private ws;
    private logger;
    private reconnectTimer;
    private reconnectAttempts;
    private connected;
    private roomId;
    private userId;
    /**
     * 构造函数
     * @param config 信令配置
     */
    constructor(config: SignalingConfig);
    /**
     * 连接到信令服务器
     * @returns Promise<void>
     */
    connect(): Promise<void>;
    /**
     * 断开与信令服务器的连接
     */
    disconnect(): void;
    /**
     * 发送消息到信令服务器
     * @param type 消息类型
     * @param payload 消息内容
     * @param to 接收者ID
     * @returns boolean 是否发送成功
     */
    sendMessage(type: SignalingMessageType, payload: any, to?: string | number | 'all'): boolean;
    /**
     * 加入房间
     * @param roomId 房间ID
     * @param userId 用户ID
     * @param userData 用户数据
     * @returns Promise<void>
     */
    joinRoom(roomId: string, userId: string | number, userData?: any): Promise<void>;
    /**
     * 离开房间
     */
    leaveRoom(): void;
    /**
     * 发送SDP offer
     * @param offer SDP offer
     * @param targetUserId 目标用户ID
     */
    sendOffer(offer: RTCSessionDescriptionInit, targetUserId: string | number): boolean;
    /**
     * 发送SDP answer
     * @param answer SDP answer
     * @param targetUserId 目标用户ID
     */
    sendAnswer(answer: RTCSessionDescriptionInit, targetUserId: string | number): boolean;
    /**
     * 发送ICE candidate
     * @param candidate ICE candidate
     * @param targetUserId 目标用户ID
     */
    sendCandidate(candidate: RTCIceCandidateInit, targetUserId: string | number): boolean;
    /**
     * 发送心跳包
     */
    sendKeepAlive(): boolean;
    /**
     * 处理收到的消息
     * @param message 收到的消息
     */
    private handleMessage;
    /**
     * 尝试重新连接
     */
    private attemptReconnect;
}
