import AnalyticsEvent from '../../analytics/AnalyticsEvent'; import { HMSConnectionRole } from '../../connection/model'; import Message from '../../sdk/models/HMSMessage'; import { Queue } from '../../utils/queue'; import { AcceptRoleChangeParams, BroadcastResponse, CreateWhiteboardResponse, findPeersRequestParams, getPeerRequestParams, GetSessionMetadataResponse, GetWhiteboardResponse, HLSRequestParams, HLSTimedMetadataParams, HMSPermissionType, HMSWhiteboardCreateOptions, JoinLeaveGroupResponse, MultiTrackUpdateRequestParams, peerIterRequestParams, PeersIterationResponse, PollInfoGetParams, PollInfoSetParams, PollLeaderboardGetParams, PollLeaderboardGetResponse, PollListParams, PollListResponse, PollQuestionsGetParams, PollQuestionsGetResponse, PollQuestionsSetParams, PollQuestionsSetResponse, PollResponseSetParams, PollResponseSetResponse, PollResponsesGetParams, PollResponsesGetResponse, PollResultParams, PollResultResponse, PollStartParams, PollStartResponse, PollStopParams, RemovePeerRequest, RequestForBulkRoleChangeParams, RequestForRoleChangeParams, SetSessionMetadataParams, SetSessionMetadataResponse, StartRTMPOrRecordingRequestParams, Track, TrackUpdateRequestParams, UpdatePeerRequestParams } from '../interfaces'; import { ISignal } from '../ISignal'; import { ISignalEventsObserver } from '../ISignalEventsObserver'; export default class JsonRpcSignal implements ISignal { readonly TAG = "[SIGNAL]: "; readonly observer: ISignalEventsObserver; readonly pongResponseTimes: Queue; /** * Sometimes before [join] is completed, there could be a lot of trickles * Sending [HMSTrickle]` before [join] web socket message leads to * error: [500] no rtc transport exists for this Peer * * We keep a list of pending trickles and send them immediately after [join] * is done. */ private isJoinCompleted; private pendingTrickle; private socket; private callbacks; private _isConnected; private id; private onCloseHandler; get isConnected(): boolean; setIsConnected(newValue: boolean, reason?: string): void; constructor(observer: ISignalEventsObserver); getPongResponseTimes(): number[]; private internalCall; private notify; open(uri: string): Promise; close(): Promise; join(name: string, data: string, disableVidAutoSub: boolean, serverSubDegrade: boolean, simulcast: boolean, onDemandTracks: boolean, offer?: RTCSessionDescriptionInit): Promise; trickle(target: HMSConnectionRole, candidate: RTCIceCandidateInit): void; offer(desc: RTCSessionDescriptionInit, tracks: Map): Promise; answer(desc: RTCSessionDescriptionInit): void; trackUpdate(tracks: Map): void; broadcast(message: Message): Promise; leave(): void; endRoom(lock: boolean, reason: string): Promise; sendEvent(event: AnalyticsEvent): void; ping(timeout: number): Promise; requestRoleChange(params: RequestForRoleChangeParams): Promise; requestBulkRoleChange(params: RequestForBulkRoleChangeParams): Promise; acceptRoleChangeRequest(params: AcceptRoleChangeParams): Promise; requestTrackStateChange(params: TrackUpdateRequestParams): Promise; requestMultiTrackStateChange(params: MultiTrackUpdateRequestParams): Promise; removePeer(params: RemovePeerRequest): Promise; startRTMPOrRecording(params: StartRTMPOrRecordingRequestParams): Promise; stopRTMPAndRecording(): Promise; startHLSStreaming(params: HLSRequestParams): Promise; stopHLSStreaming(params?: HLSRequestParams): Promise; sendHLSTimedMetadata(params?: HLSTimedMetadataParams): Promise; updatePeer(params: UpdatePeerRequestParams): Promise; getPeer(params: getPeerRequestParams): Promise; joinGroup(name: string): Promise; leaveGroup(name: string): Promise; addToGroup(peerId: string, name: string): Promise; removeFromGroup(peerId: string, name: string): Promise; peerIterNext(params: peerIterRequestParams): Promise; findPeers(params: findPeersRequestParams): Promise; setSessionMetadata(params: SetSessionMetadataParams): Promise; listenMetadataChange(keys: string[]): Promise; getSessionMetadata(key?: string): Promise; setPollInfo(params: PollInfoSetParams): Promise; getPollInfo(params: PollInfoGetParams): Promise; setPollQuestions(params: PollQuestionsSetParams): Promise; startPoll(params: PollStartParams): Promise; stopPoll(params: PollStopParams): Promise; getPollQuestions(params: PollQuestionsGetParams): Promise; setPollResponses(params: PollResponseSetParams): Promise; getPollResponses(params: PollResponsesGetParams): Promise; getPollsList(params: PollListParams): Promise; getPollResult(params: PollResultParams): Promise; createWhiteboard(params: HMSWhiteboardCreateOptions): Promise; getWhiteboard(params: { id: string; permission?: Array; }): Promise; fetchPollLeaderboard(params: PollLeaderboardGetParams): Promise; private validateConnection; private onMessageHandler; private handleResponseWithId; private handleResponseWithMethod; private resolvePingOnAnyResponse; private rejectPendingCalls; private pingPongLoop; private call; private offlineListener; private onlineListener; }