import { Track } from "../model/Track";
import { WebSocketMessageBody } from "../websocket-handler/WebsocketHandler";
import { Participant } from "../model/Participant";
import { Base } from "../base/Base";
import { TrackStats } from "../model/TrackStats";
export declare abstract class BaseVideoCallHandler extends Base {
    protected onObjectCreated(): void;
    init(isForceFully?: boolean): Promise<void>;
    abstract onReconnect(): Promise<void>;
    abstract onSocketMessage(websocketCallHandler: WebSocketMessageBody): void;
    abstract stopTrack(track: Track): void;
    abstract pauseTrack(track: Track): void;
    abstract resumeTrack(track: Track): void;
    abstract sendTrack(track: Track): void;
    abstract resumeIncomingTrack(track: Track): void;
    abstract pauseIncomingTrack(track: Track): void;
    abstract onParticipantUpdated(): void;
    abstract createDataChannel(): any;
    abstract sendMessageViaDataChannel(messagePayload: any): any;
    onAllParticipants(participants: Participant[]): Promise<void>;
    onPing(): Promise<void>;
    onParticipantStartMeetingCalled(participants: Participant): Promise<void>;
    onUserJoined(participants: Participant): Promise<void>;
    onUserLeft(participants: Participant): Promise<void>;
    getConsumerForTrack(track: Track): void;
    resumeProducerOrConsumerForTrack(track: Track): Promise<void>;
    pauseProducerOrConsumerForTrack(track: Track): Promise<void>;
    reconnectedWithoutPing(): void;
    participantAudioVideoStatusUpdated(participant: Participant): void;
    updateSpatialForTrack(track: Track, spatialLayerIndex: number): Promise<void>;
    cleanup(shouldStopTracks?: boolean): Promise<void>;
    restartTransport(): void;
    getClientStats: () => Promise<TrackStats[]>;
}
