/******************************************************************************************
 * Repository: https://github.com/kolserdav/werift-sfu-react.git
 * File name: rtc.ts
 * Author: Sergey Kolmiller
 * Email: <uyem.ru@gmail.com>
 * License: MIT
 * License text: See in LICENSE file
 * Copyright: kolserdav, All rights reserved (c)
 * Create Date: Wed Aug 24 2022 14:14:09 GMT+0700 (Krasnoyarsk Standard Time)
 ******************************************************************************************/
/// <reference types="node" />
import * as werift from 'werift';
import { RTCInterface, MessageType, SendMessageArgs, RoomUser, RoomList, Command } from '../types/interfaces';
import WS from './ws';
import DB from './db';
declare type OnChangeVideoTrack = (args: {
    roomId: string | number;
    command: Command;
    target: string | number;
}) => void;
export declare type OnRoomConnect = (args: {
    roomId: string | number;
    userId: string | number;
    roomUsers: RoomUser[];
}) => void;
export declare type OnRoomOpen = (args: {
    roomId: string | number;
    ownerId: string | number;
}) => void;
declare class RTC extends DB implements Omit<RTCInterface, 'peerConnections' | 'createRTC' | 'handleVideoAnswerMsg' | 'addTracks'> {
    peerConnectionsServer: RTCInterface['peerConnectionsServer'];
    readonly delimiter = "_";
    rooms: Record<string | number, RoomUser[]>;
    ssrcIntervals: Record<string, NodeJS.Timer>;
    muteds: RoomList;
    offVideo: RoomList;
    askeds: RoomList;
    adminMuteds: RoomList;
    banneds: Record<string, RoomUser[]>;
    muteForAll: Record<string, boolean>;
    onRoomConnect: OnRoomConnect | undefined;
    onRoomDisconnect: OnRoomConnect | undefined;
    onChangeVideoTrack: OnChangeVideoTrack | undefined;
    onChangeMute: OnChangeVideoTrack | undefined;
    readonly icePortRange: [number, number] | undefined;
    ws: WS;
    streams: Record<string, Record<string, werift.MediaStreamTrack[]>>;
    constructor({ ws, prisma }: {
        ws: WS;
        prisma: DB['prisma'];
    });
    getPeerId(userId: number | string, target: number | string, connId: string): string;
    closePeerConnectionHandler({ id, data: { target, roomId }, connId, }: SendMessageArgs<MessageType.GET_CLOSE_PEER_CONNECTION>): void;
    createRTCServer: RTCInterface['createRTCServer'];
    getRevPeerId(peerId: string): {
        peerId: string;
        userId: string;
        target: string;
        connId: string;
    };
    handleIceCandidate: RTCInterface['handleIceCandidate'];
    getVideoTrackHandler: ({ id, data: { command, target, userId }, }: SendMessageArgs<MessageType.GET_VIDEO_TRACK>) => void;
    handleCandidateMessage: RTCInterface['handleCandidateMessage'];
    handleOfferMessage: RTCInterface['handleOfferMessage'];
    sendCloseMessages({ roomId, userId, }: {
        roomId: string | number;
        userId: string | number;
    }): void;
    private deleteRoomItem;
    getToAdminHandler({ data: { target, userId, command }, id, connId, }: SendMessageArgs<MessageType.GET_TO_ADMIN>): Promise<void>;
    private getStreamConnId;
    private getPeerConnId;
    getKeysStreams(roomId: string | number): string[];
    addTracksServer: RTCInterface['addTracksServer'];
    private cleanStream;
    closeVideoCall: RTCInterface['closeVideoCall'];
    addUserToRoom({ userId, roomId, onRoomOpen, isPublic, }: {
        userId: number | string;
        roomId: number | string;
        onRoomOpen?: OnRoomOpen;
        isPublic: boolean;
    }): Promise<{
        error: 1 | 0;
        isOwner: boolean;
    }>;
    getRoomLenght(): number;
    handleGetRoomMessage({ message, port, cors, onRoomConnect, onRoomOpen, }: {
        message: SendMessageArgs<MessageType.GET_ROOM>;
        port: number;
        cors: string;
        onRoomConnect?: OnRoomConnect;
        onRoomOpen?: OnRoomOpen;
    }): Promise<void>;
    onClosedCall: RTCInterface['onClosedCall'];
    getPeerConnectionKeys(roomId: string | number): string[];
    cleanDuplicateConnections({ roomId, userId, target, }: {
        roomId: string;
        userId: string;
        target: string;
    }): void;
    cleanConnections(roomId: string, userId: string): void;
    getMuteHandler({ id, data: { muted, roomId } }: SendMessageArgs<MessageType.GET_MUTE>): void;
    getMuteForAllHandler: ({ id, data: { value }, }: SendMessageArgs<MessageType.GET_MUTE_FOR_ALL>) => void;
    setAskedFloorHandler: ({ id, data: { userId, command }, }: SendMessageArgs<MessageType.GET_ASK_FLOOR>) => void;
    getToMuteHandler({ id: roomId, data: { target }, }: SendMessageArgs<MessageType.GET_TO_MUTE>): void;
    handleGetToBan({ id: roomId, data: { target, userId }, }: SendMessageArgs<MessageType.GET_TO_BAN>): Promise<void>;
    handleGetToUnMute({ id: roomId, data: { target }, }: SendMessageArgs<MessageType.GET_TO_UNMUTE>): void;
    handleGetToUnBan({ id: roomId, data: { target, userId }, }: SendMessageArgs<MessageType.GET_TO_UNBAN>): void;
}
export default RTC;
//# sourceMappingURL=rtc.d.ts.map