UNPKG

sinch-rtc

Version:

RTC JavaScript/Web SDK

98 lines 3.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EstablishedState = void 0; const Option_1 = require("fp-ts/Option"); const function_1 = require("fp-ts/function"); const mxp_1 = require("../mxp"); const models_1 = require("../mxp/models"); const SessionState_1 = require("./SessionState"); const TerminationCause_1 = require("./TerminationCause"); const SessionStateBase_1 = require("./SessionStateBase"); const TransitionSource_1 = require("./fsm/TransitionSource"); const CallTerminationConfig = new Map([ [ TerminationCause_1.TerminationCause.None, { terminationCause: TerminationCause_1.TerminationCause.HungUp, headers: { extterm: mxp_1.HeaderBooleanValue.Yes, }, }, ], [ TerminationCause_1.TerminationCause.Inactive, { terminationCause: TerminationCause_1.TerminationCause.Inactive, headers: { inactive: mxp_1.HeaderBooleanValue.Yes, }, }, ], [ TerminationCause_1.TerminationCause.IceFailedToConnect, { terminationCause: TerminationCause_1.TerminationCause.IceFailedToConnect, headers: { iceFailed: mxp_1.HeaderBooleanValue.Yes, }, }, ], ]); class EstablishedState extends SessionStateBase_1.SessionStateBase { constructor(session) { super(SessionState_1.SessionState.Established, session); this.toMessageContent = (terminationCause) => CallTerminationConfig.has(terminationCause) ? (0, Option_1.some)(CallTerminationConfig.get(terminationCause)) : Option_1.none; } setTerminationCauseAndLeave(messageContent) { this.terminationCause = messageContent.terminationCause; const mxpMessageBuilder = this.Session.newMessage().method(models_1.Method.Leave); const mxpMessage = messageContent.headers ? mxpMessageBuilder.values(messageContent.headers).build() : mxpMessageBuilder.build(); this.sendOutboundMessage(mxpMessage); } onWillTerminate(source) { if (source === TransitionSource_1.TransitionSource.RemotePeerMessage) { return; } switch (this.terminationCause) { case TerminationCause_1.TerminationCause.Error: this.sendError(this.Session.error); return; default: this.sendMxpMessageForLocalTermination(); return; } } sendMxpMessageForLocalTermination() { (0, function_1.pipe)(this.terminationCause, this.toMessageContent, (0, Option_1.match)(() => { // No mapping found for this terminationCause in CallTerminationConfig // No action is required }, (messageContent) => this.setTerminationCauseAndLeave(messageContent))); } handleInboundMessage(message) { switch (message.method) { case models_1.Method.Leave: this.terminateBasedOnMessage(message, TerminationCause_1.TerminationCause.HungUp); return true; case models_1.Method.Ack: // todo: handle sdp if no remote description exist return true; case models_1.Method.Join: // keep sending joined as a response even after established this.sendJoined(message); return true; case models_1.Method.PeerEvent: this.Session.emitJsepEvent(message); return true; case models_1.Method.Error: this.terminateBasedOnMessage(message, TerminationCause_1.TerminationCause.Error); return true; } return false; } } exports.EstablishedState = EstablishedState; //# sourceMappingURL=EstablishedState.js.map