163 lines
5.8 KiB
JavaScript
163 lines
5.8 KiB
JavaScript
$(document).ready(() => {
|
|
var webComponent = document.querySelector('openvidu-webcomponent');
|
|
|
|
webComponent.addEventListener('sessionCreated', (event) => {
|
|
var session = event.detail;
|
|
appendElement('sessionCreated');
|
|
|
|
|
|
// You can see the session documentation here
|
|
// https://docs.openvidu.io/en/stable/api/openvidu-browser/classes/session.html
|
|
|
|
session.on('connectionCreated', (e) => {
|
|
console.error("connectionCreated", e);
|
|
var user = JSON.parse(e.connection.data).clientData;
|
|
appendElement(user + '-connectionCreated');
|
|
});
|
|
|
|
session.on('streamDestroyed', (e) => {
|
|
console.log("streamDestroyed", e);
|
|
var user = JSON.parse(e.stream.connection.data).clientData;
|
|
appendElement(user + '-streamDestroyed');
|
|
});
|
|
|
|
session.on('streamCreated', (e) => {
|
|
console.log("streamCreated", e);
|
|
var user = JSON.parse(e.stream.connection.data).clientData;
|
|
appendElement(user + '-streamCreated');
|
|
});
|
|
|
|
session.on('sessionDisconnected', (e) => {
|
|
console.warn("sessionDisconnected ", e);
|
|
var user = JSON.parse(e.target.connection.data).clientData;
|
|
appendElement(user + '-sessionDisconnected');
|
|
});
|
|
});
|
|
|
|
webComponent.addEventListener('publisherCreated', (event) => {
|
|
var publisher = event.detail;
|
|
appendElement('publisherCreated')
|
|
|
|
// You can see the publisher documentation here
|
|
// https://docs.openvidu.io/en/stable/api/openvidu-browser/classes/publisher.html
|
|
|
|
publisher.on('streamCreated', (e) => {
|
|
console.warn("Publisher streamCreated", e);
|
|
appendElement('publisher-streamCreated');
|
|
});
|
|
|
|
publisher.on('streamPlaying', (e) => {
|
|
appendElement('publisher-streamPlaying');
|
|
|
|
});
|
|
});
|
|
|
|
|
|
webComponent.addEventListener('error', (event) => {
|
|
console.log('Error event', event.detail);
|
|
});
|
|
|
|
var user = 'user' + Math.floor(Math.random() * 100);
|
|
joinSession('webcomponentTestE2ESession', user);
|
|
});
|
|
|
|
|
|
function appendElement(id) {
|
|
var eventsDiv = document.getElementById('events');
|
|
var element = document.createElement('div');
|
|
element.setAttribute("id", id);
|
|
element.setAttribute("style", "height: 200px;");
|
|
eventsDiv.appendChild(element);
|
|
}
|
|
|
|
async function joinSession(sessionName, user) {
|
|
var webComponent = document.querySelector('openvidu-webcomponent');
|
|
var tokens = [];
|
|
var token1 = await getToken(sessionName)
|
|
var token2 = await getToken(sessionName);
|
|
tokens.push(token1, token2);
|
|
var ovSettings = {
|
|
chat: true,
|
|
autopublish: true,
|
|
toolbarButtons: {
|
|
audio: true,
|
|
video: true,
|
|
screenShare: false,
|
|
fullscreen: true,
|
|
layoutSpeaking: true,
|
|
exit: true,
|
|
}
|
|
};
|
|
webComponent.sessionConfig = { sessionName, user, tokens, ovSettings };
|
|
}
|
|
|
|
/**
|
|
* --------------------------
|
|
* SERVER-SIDE RESPONSIBILITY
|
|
* --------------------------
|
|
* These methods retrieve the mandatory user token from OpenVidu Server.
|
|
* This behavior MUST BE IN YOUR SERVER-SIDE IN PRODUCTION (by using
|
|
* the API REST, openvidu-java-client or openvidu-node-client):
|
|
* 1) Initialize a session in OpenVidu Server (POST /api/sessions)
|
|
* 2) Generate a token in OpenVidu Server (POST /api/tokens)
|
|
* 3) Configure OpenVidu Web Component in your client side with the token
|
|
*/
|
|
|
|
var OPENVIDU_SERVER_URL = "https://localhost:4443" ;
|
|
var OPENVIDU_SERVER_SECRET = 'MY_SECRET';
|
|
|
|
function getToken(sessionName) {
|
|
return createSession(sessionName).then((sessionId) => createToken(sessionId));
|
|
}
|
|
|
|
function createSession(sessionName) { // See https://docs.openvidu.io/en/stable/reference-docs/REST-API/#post-apisessions
|
|
return new Promise((resolve, reject) => {
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: OPENVIDU_SERVER_URL + '/api/sessions',
|
|
data: JSON.stringify({ customSessionId: sessionName }),
|
|
headers: {
|
|
Authorization: 'Basic ' + btoa('OPENVIDUAPP:' + OPENVIDU_SERVER_SECRET),
|
|
'Content-Type': 'application/json',
|
|
},
|
|
success: (response) => resolve(response.id),
|
|
error: (error) => {
|
|
if (error.status === 409) {
|
|
resolve(sessionName);
|
|
} else {
|
|
console.warn('No connection to OpenVidu Server. This may be a certificate error at ' + OPENVIDU_SERVER_URL);
|
|
if (
|
|
window.confirm(
|
|
'No connection to OpenVidu Server. This may be a certificate error at "' +
|
|
OPENVIDU_SERVER_URL +
|
|
'"\n\nClick OK to navigate and accept it. ' +
|
|
'If no certificate warning is shown, then check that your OpenVidu Server is up and running at "' +
|
|
OPENVIDU_SERVER_URL +
|
|
'"',
|
|
)
|
|
) {
|
|
location.assign(OPENVIDU_SERVER_URL + '/accept-certificate');
|
|
}
|
|
}
|
|
},
|
|
});
|
|
});
|
|
}
|
|
|
|
function createToken(sessionId) {
|
|
// See https://docs.openvidu.io/en/stable/reference-docs/REST-API/#post-apitokens
|
|
return new Promise((resolve, reject) => {
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: OPENVIDU_SERVER_URL + '/api/tokens',
|
|
data: JSON.stringify({ session: sessionId }),
|
|
headers: {
|
|
Authorization: 'Basic ' + btoa('OPENVIDUAPP:' + OPENVIDU_SERVER_SECRET),
|
|
'Content-Type': 'application/json',
|
|
},
|
|
success: (response) => resolve(response.token),
|
|
error: (error) => reject(error),
|
|
});
|
|
});
|
|
}
|