/** @module VideoRTC */ var Janus = require('./externals/janus.nojquery'); var Promise = require('bluebird/js/release/bluebird'); var echoTest = require('./lib/echoTest').echoTest; var splitClient = require('./lib/splitClient').splitClient; var splitAgent = require('./lib/splitAgent').splitAgent; var videoRoom = require('./lib/videoRoom').videoRoom; var videoPlayer = require('./lib/videoPlayer').videoPlayer; var getDevices = require('./lib/getDevices').getDevices; var detect = require('./lib/detect').detect; var videoMail = require('./lib/videoMail').videoMail; var videoCall = require('./lib/videoCall').videoCall; if(!window.VideoRTC) window.VideoRTC = {}; function VideoRTC(endPoints, iceServers, debugLevel) { if(!endPoints && !iceServers) return null; debugLevel = (debugLevel === 'all' || debugLevel === 'trace' || debugLevel === 'debug' || debugLevel === 'log' || debugLevel === 'warn' || debugLevel === 'error' ? debugLevel : false); window.VideoRTC.server = { endPoints: endPoints, iceServers: iceServers, debugLevel: debugLevel }; window.VideoRTC.connection = { status: false, handle: null }; window.VideoRTC.getBrowser = getBrowser; window.VideoRTC.isMobile = isMobile; return { connect: connect, disconnect: disconnect, getBrowser: getBrowser, isConnected: isConnected, isMobile: isMobile }; } /** * It is checked if there is any active session between Client and the VideoGateway * @return {Boolean} Is the client connected with the VideoGateway? * @example * var status = myVideoApp.isConnected(); // true or false * console.log("Status: " + status); */ var isConnected = function() { return window.VideoRTC.connection.status; }; /** * A session is created between the Client and the VideoGateway * @return {Promise<VideoRTC>} VideoRTC methods (Success): echoTest, detect, getDevices, splitAgent, splitClient, videoRoom, videoMail, videoPlayer, videoCall * @example * var connection = myVideoApp.connect() * .then(function(usecases) { * // Use Cases (Classes) * ... * }) * .catch(function(cause) { * console.log(cause || "Error connecting with the VideoRTC"); * }) */ var connect = function() { return new Promise(function (resolve, reject) { // We connect with the VideoRTC Janus.init({ debug: window.VideoRTC.server.debugLevel, callback: function() { if(Janus.isWebrtcSupported()) { window.VideoRTC.connection.handle = new Janus( { server: window.VideoRTC.server.endPoints, iceServers: window.VideoRTC.server.iceServers, success: function() { // The session was successfully created and is ready to be used Janus.log('Connected with Video Gateway'); window.VideoRTC.connection.status = true; resolve({ detect: detect, echoTest: echoTest, getDevices: getDevices, splitAgent: splitAgent, splitClient: splitClient, videoCall: videoCall, videoRoom: videoRoom, videoMail: videoMail, videoPlayer: videoPlayer }); }, error: function(cause) { // The session was NOT successfully created Janus.error(cause); window.VideoRTC.connection.status = false; reject(); }, destroyed: function() { // The session was destroyed and can't be used any more Janus.error('Destroyed Connection'); window.VideoRTC.connection.status = false; reject(); } } ); } else { reject("No WebRTC support..."); } } }); }); }; /** * The current session and all connections with the VideoGateway are closed * @return {nothing} * @example * myVideoApp.disconnect() */ var disconnect = function() { if(window.VideoRTC.connection && window.VideoRTC.connection.handle && window.VideoRTC.connection.handle.destroy) window.VideoRTC.connection.handle.destroy(); window.VideoRTC.connection = { status: false, handle: null }; } /** * Detects if the requester client is using or not a mobile device * @return {Boolean} Is the client using a Mobile device? * @example * var isMobile = myVideoApp.isMobile(); // true or false * console.log("Mobile device?: " + isMobile); */ var isMobile = function() { return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); }; /** * Get the browser name used by the client * @return {string} Browser name: "chrome", "firefox", "safari", "opera" or "IE" * @example * var browserName = myVideoApp.getBrowser(); // "chrome", "firefox"... * console.log("Browser: " + browserName); */ var getBrowser = function() { //IE if (navigator.appName == "Microsoft Internet Explorer") { return "IE"; } //Chrome else if ((navigator.userAgent.toLowerCase().indexOf('chrome') > -1) && (navigator.userAgent.toLowerCase().indexOf('safari') > -1) && (navigator.appName == "Netscape")) { return "chrome"; } //Firefox else if ((navigator.userAgent.toLowerCase().indexOf('firefox') > -1) && (navigator.appName == "Netscape")) { return "firefox"; } //Safari else if ((navigator.userAgent.toLowerCase().indexOf('safari') > -1) && !(navigator.userAgent.toLowerCase().indexOf('chrome') > -1) && (navigator.appName == "Netscape")) { return "safari"; } //Opera else if (navigator.appName == "Opera") { return "opera"; } else { return "chrome"; } }; module.exports = VideoRTC;