import { SetupDataChannelEvent } from "../ws/event/DataChannelEvents";
import { Participant } from "../../util/Participant";
import { Logger } from "../../log/Logger";
import { InfobipGateway } from "../../gateway/InfobipGateway";
import { ApiEventEmitter } from "../../util/ApiEventEmitter";
import { DataChannel } from "../DataChannel";
import { AnyDataChannelEvent } from "../event/DataChannelEvents";
import { DataChannelEventHandlers } from "../event/DataChannelEventHandlers";
import { Endpoint } from "../../util/Endpoint";
type IceCandidateHandler = (ev: RTCPeerConnectionIceEvent) => any;
export declare class DefaultDataChannel implements DataChannel {
    private gateway;
    private logger;
    private callId;
    private currentUserIdentity;
    private participantResolver;
    private iceCandidateHandler;
    private canSendMessage;
    private apiEventEmitter;
    private conferenceId;
    private readonly dataEventEmitter;
    private textRoomId;
    private dataChannel;
    private textRoomParticipants;
    private dataChannelPc;
    private readonly availabilityLock;
    private readonly timeLock;
    private readonly bufferLock;
    private readonly pendingMessages;
    private currentAvailabilityLock;
    private currentBufferLock;
    constructor(gateway: InfobipGateway, logger: Logger, callId: string, currentUserIdentity: string, participantResolver: (identity: string) => Participant, iceCandidateHandler: IceCandidateHandler, canSendMessage: () => boolean, apiEventEmitter: ApiEventEmitter, conferenceId: string);
    private setupAvailabilityLock;
    initialize(event: SetupDataChannelEvent, rtcConfig?: RTCConfiguration): void;
    on(name: AnyDataChannelEvent, handler: DataChannelEventHandlers.Any): void;
    send(text: string, to?: Endpoint): Promise<string>;
    destroy(): void;
    removeParticipantOnReconnect(identity: string): void;
    addParticipantOnReconnect(identity: string): void;
    private getMessageRecipient;
    private onDataChannel;
    private handleErrorMessage;
    private handleDataMessage;
    private handleAnnouncementData;
    private emitDataSent;
    private emitDataReceived;
    private emitBroadcastTextReceived;
    private handleLeaveMessage;
    private handleSuccessMessage;
    private handleJoinMessage;
    private initializeDataChannelListeners;
    private sendAnswer;
    private sendJoinMessage;
    private sendTextMessage;
    private sendDataChannelMessage;
}
export {};
