UNPKG

podchat-browser

Version:

Javascript SDK to use POD's Chat Service - Browser Only

1,189 lines (1,035 loc) 124 kB
import {chatMessageVOTypes, inviteeVOidTypes, callStickerTypes, callMetaDataTypes} from "./lib/constants" import Utility from "./utility/utility" import errorHandler, {errorList} from "./lib/errorHandler"; import CallsList from "./lib/call/callsList"; import {DeviceManager} from "./lib/call/deviceManager"; import Call from "./lib/call/call"; import CallServerManager from "./lib/call/callServerManager"; import InquiryCallParticipants from "./lib/chat/call/inquiryCallParticipants"; import AdminMethods from "./lib/chat/call/adminMethods"; function ChatCall(app, params) { app.call = new Call(app); app.callsManager = new CallsList(app); const inquiryCallModule = new InquiryCallParticipants(app); app.call.inquiryCallParticipants = inquiryCallModule; app.call.deviceManager = new DeviceManager(app); app.call.adminMethods = new AdminMethods(app); const callServerController = new CallServerManager(app); let //Utility = params.Utility, currentModuleInstance = this, //app.chatEvents = params.app.chatEvents, callRequestController = { imCallOwner: false, callRequestReceived: false, callEstablishedInMySide: false, callRequestTimeout: null, iRequestedCall: false, iAcceptedCall: false, canProcessStartCall: function (callId) { app.sdkParams.consoleLogging && console.log( "[SDK] canProcessStartCall:", {callId}, {acceptedCallId: app.call.sharedVariables.acceptedCallId}, callRequestController.iAcceptedCall, callRequestController.iAcceptedCall && app.call.sharedVariables.acceptedCallId == callId ); if (callRequestController.iAcceptedCall && app.call.sharedVariables.acceptedCallId == callId || callRequestController.iRequestedCall && app.call.sharedVariables.requestedCallId == callId) return true; return false; } }, // generalTypeCode = params.typeCode, // currentCallParams = {}, latestCallRequestId = null, screenShareInfo = new screenShareStateManager(app), //shouldReconnectCallTimeout = null, // screenShareState = { // started: false, // imOwner: false // }, callUsers = {}, //callServerManager(), //callTopicHealthChecker = new peersHealthChecker(), //messageTtl = params.messageTtl || 10000, callOptions = app.sdkParams.callOptions, config = { getHistoryCount: 25 }; app.call.sharedVariables.useInternalTurnAddress = !!(callOptions && callOptions.useInternalTurnAddress); app.call.sharedVariables.useCustomTurnAddress = !!(callOptions && callOptions.useCustomTurnAddress); app.call.sharedVariables.callTurnIp = (callOptions && callOptions.callTurnIp ? callOptions.callTurnIp : ""); app.call.sharedVariables.globalCallRequestTimeout = app.sdkParams.callRequestTimeout; app.call.sharedVariables.callDivId = (callOptions && callOptions.hasOwnProperty('callDivId') && typeof callOptions.callDivId === 'string') ? callOptions.callDivId : 'call-div'; app.call.sharedVariables.callAudioTagClassName = (callOptions && callOptions.hasOwnProperty('callAudioTagClassName') && typeof callOptions.callAudioTagClassName === 'string') ? callOptions.callAudioTagClassName : ''; app.call.sharedVariables.callVideoTagClassName = (callOptions && callOptions.hasOwnProperty('callVideoTagClassName') && typeof callOptions.callVideoTagClassName === 'string') ? callOptions.callVideoTagClassName : ''; app.call.sharedVariables.callVideoMinWidth = (callOptions && callOptions.hasOwnProperty('callVideo') && typeof callOptions.callVideo === 'object' && callOptions.callVideo.hasOwnProperty('minWidth')) ? callOptions.callVideo.minWidth : 320; app.call.sharedVariables.callVideoMinHeight = (callOptions && callOptions.hasOwnProperty('callVideo') && typeof callOptions.callVideo === 'object' && callOptions.callVideo.hasOwnProperty('minHeight')) ? callOptions.callVideo.minHeight : 180; app.call.sharedVariables.callNoAnswerTimeout = app.sdkParams.callOptions?.callNoAnswerTimeout || 0; app.call.sharedVariables.callStreamCloseTimeout = app.sdkParams.callOptions?.streamCloseTimeout || 10000; function screenShareStateManager(app) { let config = { ownerId: 0, imOwner: false, isStarted: false, width: app.call.sharedVariables.callVideoMinWidth, height: app.call.sharedVariables.callVideoMinHeight }; return { setOwner: function (ownerId) { config.ownerId = +ownerId; }, setIsStarted: function (isStarted) { config.isStarted = isStarted; }, isStarted: function () { return config.isStarted; }, iAmOwner: function () { return config.ownerId === app.store.user.get().id }, setWidth: function (width) { config.width = width; }, setHeight: function (height) { config.height = height; }, getWidth: function (width) { return config.width; }, getHeight: function (height) { return config.height; }, getOwner: function () { return config.ownerId }, setDimension: function (dimension) { if (dimension && dimension.width && +dimension.width > 0 && dimension.height && +dimension.height > 0 ) { screenShareInfo.setHeight(dimension.height); screenShareInfo.setWidth(dimension.width); } else { screenShareInfo.setHeight(app.call.sharedVariables.callVideoMinHeight); screenShareInfo.setWidth(app.call.sharedVariables.callVideoMinWidth); } } } } function callServerManager() { let config = { servers: [], currentServerIndex: 0, }; return { setServers: function (serversList) { config.servers = serversList; config.currentServerIndex = 0; }, getCurrentServer: function () { return config.servers[0]//config.currentServerIndex]; }, isJanus: function () { return config.servers[config.currentServerIndex].toLowerCase().substr(0, 1) === 'j'; }, canChangeServer: function () { return config.currentServerIndex < config.servers.length - 1; }, changeServer: function () { if (this.canChangeServer()) { app.sdkParams.consoleLogging && console.debug('[SDK][changeServer] Changing kurento server...'); config.currentServerIndex++; } } } } let init = function () { }, raiseCallError = function (errorObject, callBack, fireEvent) { app.errorHandler.raiseError(errorObject, callBack, fireEvent, { eventName: 'callEvents', eventType: 'CALL_ERROR', environmentDetails: app.call.currentCall()?.getCallDetails() }); }, sendCallMessage = function (message, callback, { timeoutTime = 0, timeoutRetriesCount = 0//, //timeoutCallback = null }) { message.token = app.sdkParams.token; let uniqueId; if (!message.uniqueId) { message.uniqueId = Utility.generateUUID(); } // message.uniqueId = uniqueId; message.chatId = app.callsManager.currentCallId(); let data = { type: 3, content: { peerName: callServerController.getCurrentServer(),// callServerName, priority: 1, content: JSON.stringify(message), ttl: app.sdkParams.messageTtl } }; if (typeof callback == 'function') { app.store.messagesCallbacks[message.uniqueId] = callback; } app.call.sharedVariables.asyncClient.send(data, function (res) { if (!res.hasError && callback) { // if (typeof callback == 'function') { // callback(res); // } // if (app.store.messagesCallbacks[uniqueId]) { // delete app.store.messagesCallbacks[uniqueId]; // } } }); if (timeoutTime || app.call.sharedVariables.globalCallRequestTimeout > 0) { app.store.asyncRequestTimeouts[message.uniqueId] && clearTimeout(app.store.asyncRequestTimeouts[message.uniqueId]); app.store.asyncRequestTimeouts[message.uniqueId] = setTimeout(function () { if (app.store.messagesCallbacks[message.uniqueId]) { delete app.store.messagesCallbacks[message.uniqueId]; } if (timeoutRetriesCount) { app.sdkParams.consoleLogging && console.log("[SDK][sendCallMessage] Retrying call request. uniqueId :" + message.uniqueId, {message}) //timeoutCallback(); sendCallMessage(message, callback, {timeoutTime, timeoutRetriesCount: timeoutRetriesCount - 1}) } else if (typeof callback == 'function') { /** * Request failed */ callback({ done: 'SKIP' }); } /* if (app.store.messagesCallbacks[uniqueId]) { delete app.store.messagesCallbacks[uniqueId]; }*/ }, timeoutTime || app.call.sharedVariables.globalCallRequestTimeout); } }, /** * Format Data To Make Call Participant * * This functions reformats given JSON to proper Object * * @access private * * @param {object} messageContent Json object of thread taken from chat server * * @param threadId * @return {object} participant Object */ formatDataToMakeCallParticipant = function (messageContent) { /** * + CallParticipantVO {object} * - id {int} * - joinTime {int} * - leaveTime {int} * - threadParticipant {object} * - sendTopic {string} * - receiveTopic {string} * - brokerAddress {string} * - active {boolean} * - callSession {object} * - callStatus {int} * - createTime {int} * - sendKey {string} * - mute {boolean} * - roleType {int} * - allowedCallCations {object} */ let participant = { id: messageContent.id, joinTime: messageContent.joinTime, leaveTime: messageContent.leaveTime, sendTopic: messageContent.sendTopic, receiveTopic: messageContent.receiveTopic, brokerAddress: messageContent.brokerAddress, active: messageContent.active, callSession: messageContent.callSession, callStatus: messageContent.callStatus, createTime: messageContent.createTime, sendKey: messageContent.sendKey, mute: messageContent.mute, video: messageContent.video, raiseHand: messageContent.raiseHand, roleType: messageContent.roleType, allowedCallCations: messageContent.allowedCallCations, }; // Add Chat Participant if exist if (messageContent.participantVO) { participant.participantVO = messageContent.participantVO; } // Add Call Session if exist if (messageContent.callSession) { participant.callSession = messageContent.callSession; } // return participant; return JSON.parse(JSON.stringify(participant)); }, /** * Format Data To Make Call Message * * This functions reformats given JSON to proper Object * * @access private * * @param {object} messageContent Json object of thread taken from chat server * * @return {object} Call message Object */ formatDataToMakeCallMessage = function (threadId, pushMessageVO) { /** * + CallVO {object} * - id {int} * - creatorId {int} * - type {int} * - createTime {string} * - startTime {string} * - endTime {string} * - status {int} * - isGroup {boolean} * - callParticipants {object} * - partnerParticipantVO {object} * - conversationVO {object} */ let callMessage = { id: pushMessageVO.id, creatorId: pushMessageVO.creatorId, type: pushMessageVO.type, createTime: pushMessageVO.createTime, startTime: pushMessageVO.startTime, endTime: pushMessageVO.endTime, status: pushMessageVO.status, isGroup: pushMessageVO.isGroup, callParticipants: pushMessageVO.callParticipants, partnerParticipantVO: pushMessageVO.partnerParticipantVO, conversationVO: pushMessageVO.conversationVO }; // return pinMessage; return JSON.parse(JSON.stringify(callMessage)); }, /** * Reformat Call Participants * * This functions reformats given Array of call Participants * into proper call participant * * @access private * * @param {object} participantsContent Array of Call Participant Objects * @param {int} threadId Id of call * * @return {object} Formatted Call Participant Array */ reformatCallParticipants = function (participantsContent) { let returnData = []; for (let i = 0; i < participantsContent.length; i++) { returnData.push(formatDataToMakeCallParticipant(participantsContent[i])); } return returnData; }, callReceived = function (params, callback) { let receiveCallData = { chatMessageVOType: chatMessageVOTypes.RECEIVE_CALL_REQUEST, typeCode: params.typeCode, //params.typeCode, pushMsgType: 3, token: app.sdkParams.token }; if (params) { if (typeof +params.callId === 'number' && params.callId > 0) { receiveCallData.subjectId = +params.callId; } else { // app.errorHandler.raiseError(errorList.INVALID_CALLID, callback, true, {}); app.errorHandler.raiseError(app.errorHandler.getFilledErrorObject({ ...errorList.INVALID_CALLID, replacements: ['callReceived'] }), callback, true, {}); /* app.chatEvents.fireEvent('error', { code: 999, message: 'Invalid call id!' }); */ return; } } else { app.chatEvents.fireEvent('error', { code: 999, message: '[SDK] No params have been sent to ReceiveCall()' }); return; } return app.messenger.sendMessage(receiveCallData, { onResult: function (result) { callback && callback(result); } }); }, sendCallMetaData = function (params) { let message = { id: params.id, userid: params.userid, content: params.content || undefined }; sendCallMessage({ id: 'SENDMETADATA', message: JSON.stringify(message), chatId: app.callsManager.currentCallId() }, null, {}); }; this.callMessageHandler = function (callMessage) { let jsonMessage = (typeof callMessage.content === 'string' && Utility.isValidJson(callMessage.content)) ? JSON.parse(callMessage.content) : callMessage.content if (jsonMessage.chatId) { app.callsManager.routeCallMessage(jsonMessage.chatId, jsonMessage); } else { app.sdkParams.consoleLogging && console.warn("[SDK] Skipping call message, no chatId is available. ", {jsonMessage}) } }; this.asyncInitialized = function (async) { app.call.sharedVariables.asyncClient = async; app.call.sharedVariables.asyncClient.on('asyncReady', function () { // callStateController.maybeReconnectAllTopics(); if (app.callsManager.currentCallId()) { app.callsManager.get(app.callsManager.currentCallId()).onChatConnectionReconnect(); } }) }; /** * Do not process the message if is not for current call * * @param type * @param threadId * @return {boolean} */ function shouldNotProcessChatMessage(type, threadId) { let restrictedMessageTypes = [ chatMessageVOTypes.MUTE_CALL_PARTICIPANT, chatMessageVOTypes.UNMUTE_CALL_PARTICIPANT, chatMessageVOTypes.CALL_PARTICIPANT_JOINED, chatMessageVOTypes.REMOVE_CALL_PARTICIPANT, chatMessageVOTypes.RECONNECT, chatMessageVOTypes.TURN_OFF_VIDEO_CALL, chatMessageVOTypes.TURN_ON_VIDEO_CALL, chatMessageVOTypes.DESTINED_RECORD_CALL, chatMessageVOTypes.RECORD_CALL, chatMessageVOTypes.RECORD_CALL_STARTED, chatMessageVOTypes.END_RECORD_CALL, chatMessageVOTypes.TERMINATE_CALL, chatMessageVOTypes.CALL_STICKER_SYSTEM_MESSAGE, chatMessageVOTypes.CALL_RECORDING_FAILED, chatMessageVOTypes.RAISE_HAND, chatMessageVOTypes.LOWER_HAND, chatMessageVOTypes.SWITCH_TO_GROUP_CALL_REQUEST // chatMessageVOTypes.END_CALL ]; if ((!app.call.callStopQueue.callStarted || threadId != app.callsManager.currentCallId()) && restrictedMessageTypes.includes(type)) { return true; } else { return false } } this.handleChatMessages = function (chatMessage, type, messageContent, contentCount, threadId, uniqueId) { app.sdkParams.consoleLogging && console.debug("[SDK][CALL_MODULE][handleChatMessages]", "type:", type, "threadId:", threadId, "currentCallId:", app.callsManager.currentCallId(), "latestCallRequestId:", latestCallRequestId, "shouldNotProcessChatMessage:", shouldNotProcessChatMessage(type, threadId)) if (shouldNotProcessChatMessage(type, threadId)) { return; } switch (type) { /** * Type 70 Send Call Request */ case chatMessageVOTypes.CALL_REQUEST: // callRequestController.callRequestReceived = true; callReceived({ callId: messageContent.callId }, function (r) { }); if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } // messageContent.callId = threadId; app.chatEvents.fireEvent('callEvents', { type: 'RECEIVE_CALL', result: messageContent, uniqueId }); if (messageContent.callId > 0) { // if(!currentCallId ) { latestCallRequestId = messageContent.callId; // } } else { app.chatEvents.fireEvent('callEvents', { type: 'PARTNER_RECEIVED_YOUR_CALL', result: messageContent, uniqueId }); } break; /** * Type 71 Accept Call Request */ case chatMessageVOTypes.ACCEPT_CALL: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } app.chatEvents.fireEvent('callEvents', { type: 'ACCEPT_CALL', result: messageContent, uniqueId }); break; /** * Type 72 Reject Call Request */ case chatMessageVOTypes.REJECT_CALL: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } messageContent.callId = threadId; app.chatEvents.fireEvent('callEvents', { type: 'REJECT_CALL', callId: threadId, result: messageContent, uniqueId }); break; /** * Type 73 Receive Call Request */ case chatMessageVOTypes.RECEIVE_CALL_REQUEST: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } if (messageContent.callId > 0) { app.chatEvents.fireEvent('callEvents', { type: 'RECEIVE_CALL', callId: threadId, result: messageContent, uniqueId }); // if(!currentCallId ) { latestCallRequestId = messageContent.callId; // } } else if (callRequestController.iRequestedCall) { app.chatEvents.fireEvent('callEvents', { type: 'PARTNER_RECEIVED_YOUR_CALL', callId: threadId, result: messageContent, uniqueId }); } break; /** * Type 263 Force Join */ case chatMessageVOTypes.FORCE_JOIN: /** * Type 74 Start Call (Start sender and receivers) */ case chatMessageVOTypes.START_CALL: if (!callRequestController.canProcessStartCall(threadId)) { app.chatEvents.fireEvent('callEvents', { type: 'CALL_STARTED_ELSEWHERE', callId: threadId, message: 'Call already started somewhere else..., aborting...', uniqueId }); return; } callRequestController.iRequestedCall = false; callRequestController.iAcceptedCall = false; //app.callsManager.currentCallId = threadId; processChatStartCallEvent(chatMessage, type, messageContent, contentCount, threadId, uniqueId); // if(callsManager().currentCallId) { // endCall({callId: callsManager().currentCallId}); // // callStop( true, false); // setTimeout(()=>{ // callsManager().currentCallId = threadId; // processChatStartCallEvent(type, messageContent, contentCount, threadId, uniqueId); // }, 5000); // } else { // callsManager().currentCallId = threadId; // processChatStartCallEvent(type, messageContent, contentCount, threadId, uniqueId); // } break; /** * Type 75 End Call Request */ case chatMessageVOTypes.END_CALL_REQUEST: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } app.chatEvents.fireEvent('callEvents', { type: 'END_CALL', result: messageContent, uniqueId }); app.callsManager.removeItem(threadId); // callStop(); break; /** * Type 76 Call Ended */ case chatMessageVOTypes.END_CALL: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } app.chatEvents.fireEvent('callEvents', { type: 'CALL_ENDED', callId: threadId, uniqueId }); if (threadId === app.callsManager.currentCallId() && app.call.callStopQueue.callStarted) { app.callsManager.removeItem(threadId); } break; /** * Type 77 Get Calls History */ case chatMessageVOTypes.GET_CALLS: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } break; /** * Type 78 Call Partner Reconnecting */ case chatMessageVOTypes.RECONNECT: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } messageContent.uniqueId = uniqueId; app.chatEvents.fireEvent('callEvents', { type: 'CALL_PARTICIPANT_RECONNECTING', callId: threadId, result: messageContent, uniqueId }); break; /** * Type 79 Call Partner Connects */ case chatMessageVOTypes.CONNECT: if (!app.callsManager.currentCallId) return; if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } app.chatEvents.fireEvent('callEvents', { type: 'CALL_PARTICIPANT_CONNECTED', callId: threadId, result: messageContent, uniqueId }); if (callUsers && callUsers[app.store.user.get().id] && callUsers[app.store.user.get().id].video) { app.call.currentCall().users().get(app.store.user.get().id).videoTopicManager().restartMediaOnKeyFrame(app.store.user.get().id, [2000, 4000, 8000, 12000]); } // if(callUsers && callUsers['screenShare'] // && screenShareInfo.isStarted() // && screenShareInfo.iAmOwner() // ) { // currentCall().users().get(store.user().id).videoTopicManager().restartMediaOnKeyFrame('screenShare', [2000,4000,8000,12000]); // } break; /** * Type 90 Contacts Synced */ case chatMessageVOTypes.CONTACT_SYNCED: app.chatEvents.fireEvent('contactEvents', { type: 'CONTACTS_SYNCED', result: messageContent, uniqueId }); break; /** * Type 91 Send Group Call Request */ case chatMessageVOTypes.GROUP_CALL_REQUEST: // callRequestController.callRequestReceived = true; callReceived({ callId: messageContent.callId }, function (r) { }); if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } if (messageContent.callId > 0) { // if(!currentCallId ) { latestCallRequestId = messageContent.callId; // } } app.chatEvents.fireEvent('callEvents', { type: 'RECEIVE_CALL', callId: threadId, result: messageContent, uniqueId }); //currentCallId = messageContent.callId; break; /** * Type 92 Call Partner Leave * 1. I have left the call (GroupCall) * 2. Other person has left the call (GroupCall) */ case chatMessageVOTypes.LEAVE_CALL: let raiseEventToClient = false if (app.call.currentCall()) { if (app.callsManager.currentCallId() == threadId) { raiseEventToClient = true; } } else if (messageContent && messageContent[0] && messageContent[0].userId && messageContent[0].userId == app.store.user.get().id ) { raiseEventToClient = true; } if(raiseEventToClient) { app.chatEvents.fireEvent('callEvents', { type: 'CALL_PARTICIPANT_LEFT', callId: threadId, result: messageContent }); } if (app.callsManager.currentCallId() != threadId) return; app.callsManager.get(threadId)?.handleParticipantLeft(messageContent, threadId); break; /** * Type 93 Add Call Participant */ case chatMessageVOTypes.ADD_CALL_PARTICIPANT: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } break; /** * Type 94 Call Participant Joined */ case chatMessageVOTypes.CALL_PARTICIPANT_JOINED: if (app.callsManager.currentCallId() != threadId) return; app.callsManager.get(threadId)?.handleParticipantJoin(messageContent, threadId); break; /** * Type 95 Remove Call Participant */ case chatMessageVOTypes.REMOVE_CALL_PARTICIPANT: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } app.chatEvents.fireEvent('callEvents', { type: 'CALL_PARTICIPANT_REMOVED', callId: threadId, result: messageContent, uniqueId }); break; /** * Type 96 Terminate Call */ case chatMessageVOTypes.TERMINATE_CALL: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } app.chatEvents.fireEvent('callEvents', { type: 'TERMINATE_CALL', callId: threadId, result: messageContent, uniqueId }); if (threadId === app.callsManager.currentCallId()) { app.callsManager.removeItem(threadId); } break; /** * Type 97 Mute Call Participant */ case chatMessageVOTypes.MUTE_CALL_PARTICIPANT: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } if (!app.call.currentCall()) return; app.call.currentCall().handleParticipantMute(messageContent, threadId); break; /** * Type 98 UnMute Call Participant */ case chatMessageVOTypes.UNMUTE_CALL_PARTICIPANT: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } app.call.currentCall().handleParticipantUnMute(messageContent, threadId); break; /** * Type 99 Partner rejected call */ case chatMessageVOTypes.CANCEL_GROUP_CALL: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } messageContent.callId = threadId; app.chatEvents.fireEvent('callEvents', { type: 'REJECT_GROUP_CALL', callId: threadId, result: messageContent, uniqueId }); break; /** * Type 110 Active Call Participants List */ case chatMessageVOTypes.ACTIVE_CALL_PARTICIPANTS: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } break; /** * Type 111 Kafka Call Session Created */ case chatMessageVOTypes.CALL_SESSION_CREATED: // if(!callRequestController.callEstablishedInMySide) // return; if (callRequestController.iRequestedCall) { app.chatEvents.fireEvent('callEvents', { type: 'CALL_SESSION_CREATED', callId: threadId, result: messageContent, uniqueId }); clearTimeout(callRequestController.callRequestTimeout); // if(!requestedCallId) { app.call.sharedVariables.requestedCallId = messageContent.callId; } // } break; /** * Type 113 Turn On Video Call */ case chatMessageVOTypes.TURN_ON_VIDEO_CALL: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } if (!app.call.currentCall()) return; app.call.currentCall().handleParticipantVideoOn(messageContent, threadId, uniqueId); break; /** * Type 114 Turn Off Video Call */ case chatMessageVOTypes.TURN_OFF_VIDEO_CALL: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } if (!app.call.currentCall()) return; app.call.currentCall().handleParticipantVideoOff(messageContent, threadId, uniqueId); break; /** * Type 121 Record Call Request */ case chatMessageVOTypes.RECORD_CALL: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } if (!app.call.currentCall()) { return; } app.chatEvents.fireEvent('callEvents', { type: 'START_RECORDING_CALL', callId: threadId, result: messageContent, uniqueId }); let user = app.call.currentCallMyUser(); if(app.call.currentCall() && !app.call.currentCall().callServerController().isJanus()) { if (user && user.user().video) { user.videoTopicManager().restartMediaOnKeyFrame(app.store.user.get().id, [4000, 8000, 12000]); } if (app.call.currentCall().users().get("screenShare") && app.call.currentCall().users().get("screenShare").videoTopicManager()) app.call.currentCall().users().get("screenShare").videoTopicManager().restartMediaOnKeyFrame("screenShare", [4000, 8000]); } break; /** * Type 122 End Record Call Request */ case chatMessageVOTypes.END_RECORD_CALL: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } app.chatEvents.fireEvent('callEvents', { type: 'STOP_RECORDING_CALL', callId: threadId, result: messageContent, uniqueId }); break; /** * Type 123 Start Screen Share */ case chatMessageVOTypes.START_SCREEN_SHARE: if (!app.call.currentCall()) return; app.call.currentCall().handleStartScreenShare(chatMessage.typeCode, chatMessage.ownerId, messageContent, threadId, uniqueId); // if (app.store.messagesCallbacks[uniqueId]) { // app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); // } break; /** * Type 124 End Screen Share */ case chatMessageVOTypes.END_SCREEN_SHARE: // screenShareInfo.setIAmOwner(false); if (app.callsManager.currentCallId()) app.callsManager.get(threadId).handleEndScreenShare(messageContent, threadId, uniqueId); break; /** * Type 125 Delete From Call List */ case chatMessageVOTypes.DELETE_FROM_CALL_HISTORY: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent)); } app.chatEvents.fireEvent('callEvents', { type: 'DELETE_FROM_CALL_LIST', callId: threadId, result: messageContent, uniqueId }); break; /** * Type 126 Destinated Record Call Request */ case chatMessageVOTypes.DESTINED_RECORD_CALL: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } if (!app.call.currentCall()) return; app.chatEvents.fireEvent('callEvents', { type: 'START_RECORDING_CALL', callId: threadId, result: messageContent, uniqueId }); if(app.call.currentCall() && !app.call.currentCall().callServerController().isJanus()) { if (app.call.currentCallMyUser().videoTopicManager()) { app.call.currentCallMyUser().videoTopicManager().restartMediaOnKeyFrame(app.store.user.get().id, [4000, 8000, 12000, 25000]); app.call.currentCallMyUser().videoTopicManager().restartMediaOnKeyFrame("screenShare", [4000, 8000, 12000, 25000]); } } break; /** * Type 129 Get Calls To Join */ case chatMessageVOTypes.GET_CALLS_TO_JOIN: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } app.chatEvents.fireEvent('callEvents', { type: 'GET_CALLS_TO_JOIN', callId: threadId, uniqueId, result: messageContent }); break; /** * Type 221 Event to tell us p2p call converted to a group call */ case chatMessageVOTypes.SWITCH_TO_GROUP_CALL_REQUEST: app.chatEvents.fireEvent('callEvents', { type: 'SWITCH_TO_GROUP_CALL', callId: threadId, result: messageContent, //contains: isGroup, callId, threadId uniqueId }); break; /** * Type 222 Call Recording Started */ case chatMessageVOTypes.RECORD_CALL_STARTED: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } app.chatEvents.fireEvent('callEvents', { type: 'CALL_RECORDING_STARTED', callId: threadId, result: messageContent, uniqueId }); if(app.call.currentCall() && !app.call.currentCall().callServerController().isJanus()) { let user1 = app.call.currentCallMyUser(); if (user1 && user1.user().video && user1.videoTopicManager()) { user1.videoTopicManager().restartMediaOnKeyFrame(app.store.user.get().id, [4000, 8000]); } if (app.call.currentCall().users().get("screenShare") && app.call.currentCall().users().get("screenShare").videoTopicManager()) app.call.currentCall().users().get("screenShare").videoTopicManager().restartMediaOnKeyFrame("screenShare", [4000, 8000]); } break; /** * Type 225 CALL STICKER SYSTEM MESSAGE */ case chatMessageVOTypes.CALL_STICKER_SYSTEM_MESSAGE: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount)); } app.chatEvents.fireEvent('callEvents', { type: 'CALL_STICKER', callId: threadId, result: messageContent, uniqueId }); break; /** * Type 227 RECALL_THREAD_PARTICIPANT */ case chatMessageVOTypes.RECALL_THREAD_PARTICIPANT: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount, uniqueId)); } break; /** * Type 228 INQUIRY_CALL */ case chatMessageVOTypes.INQUIRY_CALL: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount, uniqueId)); } break; /** * Type 230 CALL_RECORDING_FAILED */ case chatMessageVOTypes.CALL_RECORDING_FAILED: if (app.store.messagesCallbacks[uniqueId]) { app.store.messagesCallbacks[uniqueId](Utility.createReturnData(chatMessage.typeCode, chatMessage.ownerId, false, '', 0, messageContent, contentCount, uniqueId)); } app.chatEvents.fireEvent('callEvents', { type: 'CALL_RECORDING_FAILED', callId: threadId, result: me