import EventEmitter from '../classes/EventEmitter'; import { ParticipantIdRegistry } from '../classes/ParticipantIdRegistry'; import { StreamDescriptionString } from '../types/ParticipantStreamDescription'; import { PerfStatReport } from '../types/PerfStatReporter'; import { NetworkStatReport } from '../types/NetworkStatReport'; import { TransportTopology } from '../classes/transport/Transport'; import ConversationFeature from '../enums/ConversationFeature'; import ConversationOption from '../enums/ConversationOption'; import MediaOption from '../enums/MediaOption'; import SignalingConnectionType from '../enums/SignalingConnectionType'; import UserRole from '../enums/UserRole'; import { JSONObject } from '../static/Json'; import { IAsrStartParams, IAsrStopParams } from '../types/Asr'; import ConversationResponse from '../types/ConversationResponse'; import MediaModifiers from '../types/MediaModifiers'; import MediaSettings from '../types/MediaSettings'; import { IAddMovieParams, IUpdateMovieData } from '../types/MovieShare'; import MuteStates from '../types/MuteStates'; import { CompositeUserId, ParticipantId, ParticipantStateData } from '../types/Participant'; import { ParticipantLayout, RequestKeyFrame, StopStream } from '../types/ParticipantLayout'; import { ParticipantListChunkParameters } from '../types/ParticipantListChunk'; import SignalingMessage, { GetParticipantsSignalingResponse, GetRoomsSignalingResponse } from '../types/SignalingMessage'; import { ChangeSimulcast } from '../types/ChangeSimulcast'; import { IPublishStreamData, IRecordConfData, IStartStreamData, IStopStreamData } from '../types/Streams'; import { SharingStatReport } from '../classes/screenshare/SharingStatReport'; /** * Параметры добавления пользователя в звонок */ export interface AddParticipantParams { /** * @deprecated */ showChatHistory?: boolean; ttChat?: boolean; /** * Удалить юзера из бан-листа. Доступно только админу звонка */ unban?: boolean; /** * JSON.stringify(\{show_chat_history: boolean\}) */ payload?: string; } /** * Should trigger SignalingEvent.NOTIFICATION on notification message and SignalingEvent.FAILED on error * https://wiki.odkl.ru/display/projects/Signaling+API#SignalingAPI-Notifications * @hidden */ export default abstract class BaseSignaling extends EventEmitter { protected _abortSignal?: AbortSignal; /** * Устанавливает сигнал прерывания для запуска звонка, если не успели отменить до установки соединения с другим участником, то он больше ни как не будет использоваться * @param signal - Сигнал прерывания или undefined для очистки */ setAbortSignal(signal: AbortSignal | undefined): void; abstract connect(connectionType: SignalingConnectionType, conversation?: ConversationResponse): Promise; abstract close(): void; abstract hangup(reason: string): Promise; abstract acceptCall(mediaSettings: MediaSettings): Promise; abstract sendSdp(participantId: ParticipantId, sdp: RTCSessionDescriptionInit, extraPayload?: Record): Promise; abstract sendCandidate(participantId: ParticipantId, candidate: RTCIceCandidate): Promise; abstract changeMediaSettings(mediaSettings: MediaSettings): Promise; abstract changeParticipantState(state: ParticipantStateData, compositeUserId?: CompositeUserId): Promise; abstract hold(hold: boolean): Promise; abstract putHandsDown(): Promise; abstract addParticipant(externalIds: CompositeUserId[], params?: AddParticipantParams): Promise; abstract addParticipantLegacy(participantIds: CompositeUserId[], params?: AddParticipantParams): Promise; abstract removeParticipant(participantId: CompositeUserId, ban?: boolean): Promise; abstract allocateConsumer(description: RTCSessionDescription | null, capabilities: { [key: string]: number | boolean | string; }): Promise; abstract acceptProducer(description: RTCSessionDescriptionInit, ssrcs: string[], sessionId: string): Promise; /** * @deprecated Use updateDisplayLayout instead */ abstract changePriorities(priorities: { [key: string]: number; }): Promise; abstract updateDisplayLayout(layouts: { [streamDesc: StreamDescriptionString]: ParticipantLayout | StopStream | RequestKeyFrame; }): Promise; abstract addMovie(data: IAddMovieParams): Promise; abstract updateMovie(data: IUpdateMovieData): Promise; abstract removeMovie(data: any): Promise; abstract startUrlSharing(sharedUrl: string): Promise; abstract stopUrlSharing(): Promise; abstract updateRooms(rooms: Record[], assignRandomly?: boolean): Promise; abstract activateRooms(roomIds: number[], deactivate: boolean): Promise; abstract switchRoom(toRoomId: number | null, participantId?: ParticipantId): Promise; abstract getRooms(withParticipants: boolean): Promise; abstract removeRooms(roomIds: number[]): Promise; abstract startStream(data: IStartStreamData): Promise; abstract stopStream(data: IStopStreamData): Promise; abstract publishStream(data: IPublishStreamData): Promise; abstract recordSetConf(conf: IRecordConfData): Promise; abstract getRecordStatus(): Promise; abstract switchTopology(topology: TransportTopology, force?: boolean): Promise; abstract reportPerfStat(report: PerfStatReport): Promise; abstract reportSharingStat(report: SharingStatReport): Promise; abstract reportNetworkStat(report: NetworkStatReport): Promise; abstract chatMessage(message: string, participantId: CompositeUserId | null): Promise; abstract chatHistory(count: number): Promise; abstract customData(data: JSONObject, participantId: ParticipantId | null): Promise; abstract grantRoles(participantId: ParticipantId, roles: UserRole[], revoke: boolean): Promise; abstract muteParticipant(participantId: ParticipantId | null, muteStates: MuteStates, requestedMedia: MediaOption[], roomId: number | null): Promise; abstract enableFeatureForRoles(feature: ConversationFeature, roles: UserRole[]): Promise; abstract pinParticipant(participantId: ParticipantId, unpin: boolean, roomId: number | null): Promise; abstract updateMediaModifiers(mediaModifiers: MediaModifiers): Promise; abstract enableVideoSuspend(enabled: boolean): Promise; abstract enableVideoSuspendSuggest(enabled: boolean): Promise; abstract changeSimulcast(changeSimulcast: ChangeSimulcast): Promise; abstract changeOptions(changes: { [key in ConversationOption]?: boolean; }): Promise; abstract getWaitingHall(fromId: SignalingMessage.WaitingParticipantId | null, count?: number, backward?: boolean): Promise; abstract promoteParticipant(participantId?: CompositeUserId, demote?: boolean): Promise; abstract requestPromotion(unrequest: boolean): Promise; abstract acceptPromotion(reject: boolean): Promise; abstract feedback(key: string): Promise; abstract getHandQueue(): Promise; abstract setProducerNotificationDataChannel(dataChannel: RTCDataChannel): void; abstract setProducerCommandDataChannel(dataChannel: RTCDataChannel): void; abstract useCommandDataChannel(status: boolean): void; abstract getParticipantListChunk(participantListChunkParameters: ParticipantListChunkParameters): Promise; abstract getParticipants(externalIds: SignalingMessage.ExternalId[]): Promise; abstract getPeerId(): number | null; abstract startAsr(params: IAsrStartParams): Promise; abstract stopAsr(params?: IAsrStopParams): Promise; abstract requestAsr(request: boolean): Promise; get ready(): boolean; setParticipantIdRegistry(participantIdRegistry: ParticipantIdRegistry): void; requestRealloc(): void; setEndpoint(endpoint: string): void; setWebTransportEndpoint(endpoint: string | null): void; setConversationId(conversationId: string): void; readyToSend(isReady?: boolean): void; cleanup(): void; requestTestMode(consumerCommand: string, producerCommand: string | null): void; getNextCommandSequenceNumber(): number; }