video-auth-js-sdk
Version:
A SDK to authenticate users with camera through a realtime stream
110 lines (97 loc) • 3.71 kB
JavaScript
import Utility from "./utility/utility";
class Messenger {
constructor(app) {
this._app = app;
this._requestsList = [];
}
sendMessage({
message,
serverName,
pushMsgType=3,
onTimeout = null,
timeoutTime = 0,
onResponse = null,
onError = null
}){
message.token = this._app.params.token;
// let uniqueId;
if (!message.uniqueId) {
message.uniqueId = Utility.generateUUID();
}
/**
* Message to send through async SDK
*
* + MessageWrapperVO {object}
* - type {int} Type of ASYNC message based on content
* + content {string}
* -peerName {string} Name of receiver Peer
* -receivers[] {int} Array of receiver peer ids (if you use this, peerName will be ignored)
* -priority {int} Priority of message 1-10, lower has more priority
* -messageId {int} Id of message on your side, not required
* -ttl {int} Time to live for message in milliseconds
* -content {string} Chat Message goes here after stringifying
* - trackId {int} Tracker id of message that you receive from DIRANA previously (if you are replying a sync message)
*/
let data = {
type: (pushMsgType > 0)
? pushMsgType
: 3,
content: {
peerName: serverName,
priority: 1,
content: JSON.stringify(message),
ttl: this._app.params.messageTtl
},
uniqueId: message.uniqueId
};
this._app.async.send(data);
if(timeoutTime) {
this._requestsList.push({
uniqueId: message.uniqueId,
data,
onTimeout,
onResponse,
onError
});
setTimeout(()=>{
onTimeout && onTimeout();
}, timeoutTime);
}
return {
uniqueId: message.uniqueId
}
}
requestExists(uniqueId){
return !!this._requestsList.some(item => item.uniqueId == uniqueId);
}
removeRequest(uniqueId){
for(let i in this._requestsList) {
if(this._requestsList[i].uniqueId == uniqueId)
delete this._requestsList[i];
}
}
getRequest(uniqueId){
return this._requestsList.find(item => item.uniqueId == uniqueId);
}
sendAiMessage(message) {
return this.sendMessage({message, serverName: this._app.params.serverName});
}
sendCallMessage(message, onTimeout, timeoutTime, onResponse){
return this.sendMessage({message, onTimeout, timeoutTime, onResponse, serverName: this._app.authSessionInfo.kurentoAddress});
}
processResponse(message){
const req = this._requestsList.find(item => item.uniqueId == message.content.uniqueId);
if(req) {
req.onTimeout = null;
if (!req.multipleResponse) {
const ind = this._requestsList.findIndex(item => item.uniqueId == message.content.uniqueId);
ind && delete this._requestsList[ind];
}
req.onResponse && req.onResponse(message);
}
}
clearRequests(){
this._requestsList = [];
}
}
export default Messenger