podchat-browser
Version:
Javascript SDK to use POD's Chat Service - Browser Only
1,192 lines (1,037 loc) • 121 kB
JavaScript
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.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 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: messageContent,
uniqueId
});
break;
/**
* Type 257 RAISE_HAND
*/
case c