From bfe8e617383dd69300e94b55d5c8b165c29b74a5 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Mon, 2 Oct 2017 10:48:47 +0200 Subject: [PATCH] Backend 'joinRoom' synchronized as quick fix for race condition --- .../dashboard/dashboard.component.html | 2 +- .../dashboard/dashboard.component.ts | 2 + .../server/core/NotificationRoomManager.java | 2 +- .../resources/static/inline.bundle.js.map | 2 +- .../src/main/resources/static/main.bundle.js | 934 +- .../main/resources/static/main.bundle.js.map | 2 +- .../main/resources/static/polyfills.bundle.js | 3158 +-- .../resources/static/polyfills.bundle.js.map | 2 +- .../main/resources/static/styles.bundle.js | 100 +- .../resources/static/styles.bundle.js.map | 2 +- .../main/resources/static/vendor.bundle.js | 18265 ++++++++-------- .../resources/static/vendor.bundle.js.map | 2 +- 12 files changed, 11296 insertions(+), 11177 deletions(-) diff --git a/openvidu-server/src/angular/frontend/src/app/components/dashboard/dashboard.component.html b/openvidu-server/src/angular/frontend/src/app/components/dashboard/dashboard.component.html index ebc1680c..82530f0b 100644 --- a/openvidu-server/src/angular/frontend/src/app/components/dashboard/dashboard.component.html +++ b/openvidu-server/src/angular/frontend/src/app/components/dashboard/dashboard.component.html @@ -23,7 +23,7 @@ Test the connection - +
diff --git a/openvidu-server/src/angular/frontend/src/app/components/dashboard/dashboard.component.ts b/openvidu-server/src/angular/frontend/src/app/components/dashboard/dashboard.component.ts index 51b91d6e..74341187 100644 --- a/openvidu-server/src/angular/frontend/src/app/components/dashboard/dashboard.component.ts +++ b/openvidu-server/src/angular/frontend/src/app/components/dashboard/dashboard.component.ts @@ -95,6 +95,8 @@ export class DashboardComponent implements OnInit, OnDestroy { const publisherRemote = OV.initPublisher('mirrored-video', { audio: true, video: true, + audioActive: true, + videoActive: true, quality: 'MEDIUM' }); diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/NotificationRoomManager.java b/openvidu-server/src/main/java/io/openvidu/server/core/NotificationRoomManager.java index 4a868ecd..6e3cba51 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/NotificationRoomManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/NotificationRoomManager.java @@ -76,7 +76,7 @@ public class NotificationRoomManager { * when responding back to the client) * @see RoomManager#joinRoom(String, String, boolean, boolean, KurentoClientSessionInfo, String) */ - public void joinRoom(String userName, String roomId, boolean dataChannels, + public synchronized void joinRoom(String userName, String roomId, boolean dataChannels, boolean webParticipant, ParticipantRequest request) { Set existingParticipants = null; UserParticipant newParticipant = null; diff --git a/openvidu-server/src/main/resources/static/inline.bundle.js.map b/openvidu-server/src/main/resources/static/inline.bundle.js.map index 107c8d68..7daf002a 100644 --- a/openvidu-server/src/main/resources/static/inline.bundle.js.map +++ b/openvidu-server/src/main/resources/static/inline.bundle.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 4a4b51ff5527d3bfe79e"],"names":[],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAQ,oBAAoB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAY,2BAA2B;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA,kDAA0C,oBAAoB,WAAW","file":"inline.bundle.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId])\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length)\n \t\t\tresolves.shift()();\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t4: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tif(installedChunks[chunkId] === 0)\n \t\t\treturn Promise.resolve();\n\n \t\t// an Promise means \"currently loading\".\n \t\tif(installedChunks[chunkId]) {\n \t\t\treturn installedChunks[chunkId][2];\n \t\t}\n \t\t// start chunk loading\n \t\tvar head = document.getElementsByTagName('head')[0];\n \t\tvar script = document.createElement('script');\n \t\tscript.type = 'text/javascript';\n \t\tscript.charset = 'utf-8';\n \t\tscript.async = true;\n \t\tscript.timeout = 120000;\n\n \t\tif (__webpack_require__.nc) {\n \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t}\n \t\tscript.src = __webpack_require__.p + \"\" + chunkId + \".chunk.js\";\n \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n \t\tscript.onerror = script.onload = onScriptComplete;\n \t\tfunction onScriptComplete() {\n \t\t\t// avoid mem leaks in IE.\n \t\t\tscript.onerror = script.onload = null;\n \t\t\tclearTimeout(timeout);\n \t\t\tvar chunk = installedChunks[chunkId];\n \t\t\tif(chunk !== 0) {\n \t\t\t\tif(chunk) chunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n \t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t}\n \t\t};\n\n \t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\tinstalledChunks[chunkId] = [resolve, reject];\n \t\t});\n \t\tinstalledChunks[chunkId][2] = promise;\n\n \t\thead.appendChild(script);\n \t\treturn promise;\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 4a4b51ff5527d3bfe79e"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap 61ce19718f19b145c7b5"],"names":[],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAQ,oBAAoB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAY,2BAA2B;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,YAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA,mDAA2C,cAAc;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA,kDAA0C,oBAAoB,WAAW","file":"inline.bundle.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId])\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length)\n \t\t\tresolves.shift()();\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t4: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tif(installedChunks[chunkId] === 0)\n \t\t\treturn Promise.resolve();\n\n \t\t// an Promise means \"currently loading\".\n \t\tif(installedChunks[chunkId]) {\n \t\t\treturn installedChunks[chunkId][2];\n \t\t}\n \t\t// start chunk loading\n \t\tvar head = document.getElementsByTagName('head')[0];\n \t\tvar script = document.createElement('script');\n \t\tscript.type = 'text/javascript';\n \t\tscript.charset = 'utf-8';\n \t\tscript.async = true;\n \t\tscript.timeout = 120000;\n\n \t\tif (__webpack_require__.nc) {\n \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t}\n \t\tscript.src = __webpack_require__.p + \"\" + chunkId + \".chunk.js\";\n \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n \t\tscript.onerror = script.onload = onScriptComplete;\n \t\tfunction onScriptComplete() {\n \t\t\t// avoid mem leaks in IE.\n \t\t\tscript.onerror = script.onload = null;\n \t\t\tclearTimeout(timeout);\n \t\t\tvar chunk = installedChunks[chunkId];\n \t\t\tif(chunk !== 0) {\n \t\t\t\tif(chunk) chunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n \t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t}\n \t\t};\n\n \t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\tinstalledChunks[chunkId] = [resolve, reject];\n \t\t});\n \t\tinstalledChunks[chunkId][2] = promise;\n\n \t\thead.appendChild(script);\n \t\treturn promise;\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 61ce19718f19b145c7b5"],"sourceRoot":""} \ No newline at end of file diff --git a/openvidu-server/src/main/resources/static/main.bundle.js b/openvidu-server/src/main/resources/static/main.bundle.js index a58fab9e..f1eb468f 100644 --- a/openvidu-server/src/main/resources/static/main.bundle.js +++ b/openvidu-server/src/main/resources/static/main.bundle.js @@ -1,253 +1,6 @@ webpackJsonp([1,4],{ -/***/ 102: -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CredentialsDialogComponent; }); -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - -var CredentialsDialogComponent = (function () { - function CredentialsDialogComponent() { - } - CredentialsDialogComponent.prototype.testVideo = function () { - this.myReference.close(this.secret); - }; - return CredentialsDialogComponent; -}()); -CredentialsDialogComponent = __decorate([ - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_4" /* Component */])({ - selector: 'app-credentials-dialog', - template: "\n
\n

\n Insert your secret\n

\n
\n \n \n \n \n \n \n \n \n \n
\n
\n ", - styles: ["\n #quality-div {\n margin-top: 20px;\n }\n #join-div {\n margin-top: 25px;\n margin-bottom: 20px;\n }\n #quality-tag {\n display: block;\n }\n h5 {\n margin-bottom: 10px;\n text-align: left;\n }\n #joinWithVideo {\n margin-right: 50px;\n }\n md-dialog-actions {\n display: block;\n }\n #join-btn {\n float: right;\n }\n "], - }), - __metadata("design:paramtypes", []) -], CredentialsDialogComponent); - -//# sourceMappingURL=credentials-dialog.component.js.map - -/***/ }), - -/***/ 103: -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_material__ = __webpack_require__(101); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__services_info_service__ = __webpack_require__(55); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_openvidu_browser__ = __webpack_require__(308); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_openvidu_browser___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_openvidu_browser__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__credentials_dialog_component__ = __webpack_require__(102); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DashboardComponent; }); -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - - - - - -var DashboardComponent = (function () { - function DashboardComponent(infoService, dialog) { - var _this = this; - this.infoService = infoService; - this.dialog = dialog; - this.lockScroll = false; - this.info = []; - this.testStatus = 'DISCONNECTED'; - this.testButton = 'Test'; - this.tickClass = 'trigger'; - this.showSpinner = false; - this.msgChain = []; - // Subscription to info updated event raised by InfoService - this.infoSubscription = this.infoService.newInfo$.subscribe(function (info) { - _this.info.push(info); - _this.scrollToBottom(); - }); - } - DashboardComponent.prototype.ngOnInit = function () { - }; - DashboardComponent.prototype.beforeunloadHandler = function () { - // On window closed leave test session - if (this.session) { - this.endTestVideo(); - } - }; - DashboardComponent.prototype.ngOnDestroy = function () { - // On component destroyed leave test session - if (this.session) { - this.endTestVideo(); - } - }; - DashboardComponent.prototype.toggleTestVideo = function () { - if (!this.session) { - this.testVideo(); - } - else { - this.endTestVideo(); - } - }; - DashboardComponent.prototype.testVideo = function () { - var _this = this; - var dialogRef; - dialogRef = this.dialog.open(__WEBPACK_IMPORTED_MODULE_4__credentials_dialog_component__["a" /* CredentialsDialogComponent */]); - dialogRef.componentInstance.myReference = dialogRef; - dialogRef.afterClosed().subscribe(function (secret) { - if (secret) { - _this.connectToSession('wss://' + location.hostname + ':8443/testSession?secret=' + secret); - } - }); - }; - DashboardComponent.prototype.connectToSession = function (mySessionId) { - var _this = this; - this.msgChain = []; - var OV = new __WEBPACK_IMPORTED_MODULE_3_openvidu_browser__["OpenVidu"](); - this.session = OV.initSession(mySessionId); - this.testStatus = 'CONNECTING'; - this.testButton = 'Testing...'; - this.session.connect('token', function (error) { - if (!error) { - _this.testStatus = 'CONNECTED'; - var publisherRemote = OV.initPublisher('mirrored-video', { - audio: true, - video: true, - quality: 'MEDIUM' - }); - publisherRemote.on('accessAllowed', function () { - _this.msgChain.push('Camera access allowed'); - }); - publisherRemote.on('accessDenied', function () { - _this.endTestVideo(); - _this.msgChain.push('Camera access denied'); - }); - publisherRemote.on('videoElementCreated', function (video) { - _this.showSpinner = true; - _this.msgChain.push('Video element created'); - }); - publisherRemote.on('remoteVideoPlaying', function (video) { - _this.msgChain.push('Remote video playing'); - _this.testButton = 'End test'; - _this.testStatus = 'PLAYING'; - _this.showSpinner = false; - }); - publisherRemote.subscribeToRemote(); - _this.session.publish(publisherRemote); - } - else { - if (error.code === 401) { - _this.endTestVideo(); - var dialogRef = void 0; - dialogRef = _this.dialog.open(__WEBPACK_IMPORTED_MODULE_4__credentials_dialog_component__["a" /* CredentialsDialogComponent */]); - dialogRef.componentInstance.myReference = dialogRef; - dialogRef.afterClosed().subscribe(function (secret) { - if (secret) { - _this.connectToSession('wss://' + location.hostname + ':8443/testSession?secret=' + secret); - } - }); - } - else { - console.error(error); - } - } - }); - }; - DashboardComponent.prototype.endTestVideo = function () { - this.session.disconnect(); - this.session = null; - this.testStatus = 'DISCONNECTED'; - this.testButton = 'Test'; - this.showSpinner = false; - this.info = []; - this.msgChain = []; - }; - DashboardComponent.prototype.scrollToBottom = function () { - try { - if (!this.lockScroll) { - this.myScrollContainer.nativeElement.scrollTop = this.myScrollContainer.nativeElement.scrollHeight; - } - } - catch (err) { - console.error('[Error]:' + err.toString()); - } - }; - return DashboardComponent; -}()); -__decorate([ - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_7" /* ViewChild */])('scrollMe'), - __metadata("design:type", typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__["l" /* ElementRef */] !== "undefined" && __WEBPACK_IMPORTED_MODULE_0__angular_core__["l" /* ElementRef */]) === "function" && _a || Object) -], DashboardComponent.prototype, "myScrollContainer", void 0); -__decorate([ - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_12" /* HostListener */])('window:beforeunload'), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", void 0) -], DashboardComponent.prototype, "beforeunloadHandler", null); -DashboardComponent = __decorate([ - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_4" /* Component */])({ - selector: 'app-dashboard', - template: __webpack_require__(238), - styles: [__webpack_require__(227)], - }), - __metadata("design:paramtypes", [typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_2__services_info_service__["a" /* InfoService */] !== "undefined" && __WEBPACK_IMPORTED_MODULE_2__services_info_service__["a" /* InfoService */]) === "function" && _b || Object, typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_1__angular_material__["j" /* MdDialog */] !== "undefined" && __WEBPACK_IMPORTED_MODULE_1__angular_material__["j" /* MdDialog */]) === "function" && _c || Object]) -], DashboardComponent); - -var _a, _b, _c; -//# sourceMappingURL=dashboard.component.js.map - -/***/ }), - -/***/ 104: -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SessionDetailsComponent; }); -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; - -var SessionDetailsComponent = (function () { - function SessionDetailsComponent() { - } - SessionDetailsComponent.prototype.ngOnInit = function () { - }; - return SessionDetailsComponent; -}()); -SessionDetailsComponent = __decorate([ - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_4" /* Component */])({ - selector: 'app-session-details', - template: __webpack_require__(239), - styles: [__webpack_require__(228)] - }), - __metadata("design:paramtypes", []) -], SessionDetailsComponent); - -//# sourceMappingURL=session-details.component.js.map - -/***/ }), - -/***/ 136: +/***/ 112: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -456,11 +209,11 @@ function WebSocketWithReconnection(config) { } module.exports = WebSocketWithReconnection; -/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(13))) +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(9))) /***/ }), -/***/ 137: +/***/ 113: /***/ (function(module, exports, __webpack_require__) { /* @@ -506,10 +259,10 @@ if (!Function.prototype.bind) { return fBound; }; } -var EventEmitter = __webpack_require__(116).EventEmitter; -var inherits = __webpack_require__(117); -var packers = __webpack_require__(304); -var Mapper = __webpack_require__(298); +var EventEmitter = __webpack_require__(91).EventEmitter; +var inherits = __webpack_require__(92); +var packers = __webpack_require__(267); +var Mapper = __webpack_require__(261); var BASE_TIMEOUT = 5000; function unifyResponseMethods(responseMethods) { if (!responseMethods) @@ -1074,8 +827,8 @@ function RpcBuilder(packer, options, transport, onRequest) { inherits(RpcBuilder, EventEmitter); RpcBuilder.RpcNotification = RpcNotification; module.exports = RpcBuilder; -var clients = __webpack_require__(299); -var transports = __webpack_require__(301); +var clients = __webpack_require__(262); +var transports = __webpack_require__(264); RpcBuilder.clients = clients; RpcBuilder.clients.transports = transports; RpcBuilder.packers = packers; @@ -1083,13 +836,13 @@ RpcBuilder.packers = packers; /***/ }), -/***/ 138: +/***/ 114: /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var EventEmitter = __webpack_require__(40); +var EventEmitter = __webpack_require__(32); var Publisher = /** @class */ (function () { function Publisher(stream, parentId) { var _this = this; @@ -1227,14 +980,14 @@ exports.Publisher = Publisher; /***/ }), -/***/ 139: +/***/ 115: /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var Subscriber_1 = __webpack_require__(140); -var EventEmitter = __webpack_require__(40); +var Subscriber_1 = __webpack_require__(116); +var EventEmitter = __webpack_require__(32); var Session = /** @class */ (function () { function Session(session, openVidu) { var _this = this; @@ -1383,13 +1136,13 @@ exports.Session = Session; /***/ }), -/***/ 140: +/***/ 116: /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var EventEmitter = __webpack_require__(40); +var EventEmitter = __webpack_require__(32); var Subscriber = /** @class */ (function () { function Subscriber(stream, parentId) { this.ee = new EventEmitter(); @@ -1410,7 +1163,7 @@ var Subscriber = /** @class */ (function () { callback(event); }); if (eventName == 'videoElementCreated') { - if (this.stream.isReady) { + if (this.stream.isVideoELementCreated) { this.ee.emitEvent('videoElementCreated', [{ element: this.stream.getVideoElement() }]); @@ -1452,13 +1205,13 @@ exports.Subscriber = Subscriber; /***/ }), -/***/ 141: +/***/ 117: /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var Stream_1 = __webpack_require__(86); +var Stream_1 = __webpack_require__(72); var Connection = /** @class */ (function () { function Connection(openVidu, local, room, options) { this.openVidu = openVidu; @@ -1508,13 +1261,14 @@ var Connection = /** @class */ (function () { var streamOpts = { id: streamOptions.id, connection: this, - recvVideo: (streamOptions.recvVideo == undefined ? true : streamOptions.recvVideo), - recvAudio: (streamOptions.recvAudio == undefined ? true : streamOptions.recvAudio), - audio: streamOptions.audio, - video: streamOptions.video, + sendAudio: streamOptions.sendAudio, + sendVideo: streamOptions.sendVideo, + recvAudio: (streamOptions.audioActive == undefined ? true : streamOptions.audioActive), + recvVideo: (streamOptions.videoActive == undefined ? true : streamOptions.videoActive), + activeAudio: streamOptions.activeAudio, + activeVideo: streamOptions.activeVideo, data: streamOptions.data, - mediaConstraints: streamOptions.mediaConstraints, - audioOnly: streamOptions.audioOnly, + mediaConstraints: streamOptions.mediaConstraints }; var stream = new Stream_1.Stream(this.openVidu, false, this.room, streamOpts); this.addStream(stream); @@ -1529,7 +1283,7 @@ exports.Connection = Connection; /***/ }), -/***/ 143: +/***/ 119: /***/ (function(module, exports) { function webpackEmptyContext(req) { @@ -1538,20 +1292,20 @@ function webpackEmptyContext(req) { webpackEmptyContext.keys = function() { return []; }; webpackEmptyContext.resolve = webpackEmptyContext; module.exports = webpackEmptyContext; -webpackEmptyContext.id = 143; +webpackEmptyContext.id = 119; /***/ }), -/***/ 144: +/***/ 120: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser_dynamic__ = __webpack_require__(164); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__app_app_module__ = __webpack_require__(169); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__environments_environment__ = __webpack_require__(171); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser_dynamic__ = __webpack_require__(126); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__app_app_module__ = __webpack_require__(131); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__environments_environment__ = __webpack_require__(133); @@ -1564,12 +1318,12 @@ __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_1__angular_platform_browser_dyna /***/ }), -/***/ 167: +/***/ 129: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_app_services_info_service__ = __webpack_require__(55); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_app_services_info_service__ = __webpack_require__(43); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AppComponent; }); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; @@ -1616,16 +1370,16 @@ var AppComponent = (function () { return AppComponent; }()); __decorate([ - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_12" /* HostListener */])('window:beforeunload', ['$event']), + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_13" /* HostListener */])('window:beforeunload', ['$event']), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0) ], AppComponent.prototype, "beforeUnloadHander", null); AppComponent = __decorate([ - __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_4" /* Component */])({ + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_5" /* Component */])({ selector: 'app-root', - template: __webpack_require__(237), - styles: [__webpack_require__(226)] + template: __webpack_require__(198), + styles: [__webpack_require__(188)] }), __metadata("design:paramtypes", [typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_1_app_services_info_service__["a" /* InfoService */] !== "undefined" && __WEBPACK_IMPORTED_MODULE_1_app_services_info_service__["a" /* InfoService */]) === "function" && _a || Object]) ], AppComponent); @@ -1635,13 +1389,13 @@ var _a; /***/ }), -/***/ 168: +/***/ 130: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser_animations__ = __webpack_require__(165); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_material__ = __webpack_require__(101); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser_animations__ = __webpack_require__(127); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_material__ = __webpack_require__(75); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AppMaterialModule; }); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; @@ -1690,24 +1444,24 @@ AppMaterialModule = __decorate([ /***/ }), -/***/ 169: +/***/ 131: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_platform_browser__ = __webpack_require__(16); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_flex_layout__ = __webpack_require__(161); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_core__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__angular_forms__ = __webpack_require__(99); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__angular_http__ = __webpack_require__(100); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_hammerjs__ = __webpack_require__(230); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_platform_browser__ = __webpack_require__(13); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_flex_layout__ = __webpack_require__(125); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_core__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__angular_forms__ = __webpack_require__(73); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__angular_http__ = __webpack_require__(74); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_hammerjs__ = __webpack_require__(192); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_hammerjs___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_hammerjs__); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__app_routing__ = __webpack_require__(170); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_app_app_material_module__ = __webpack_require__(168); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__services_info_service__ = __webpack_require__(55); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__app_component__ = __webpack_require__(167); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__components_dashboard_dashboard_component__ = __webpack_require__(103); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__components_session_details_session_details_component__ = __webpack_require__(104); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__components_dashboard_credentials_dialog_component__ = __webpack_require__(102); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_6__app_routing__ = __webpack_require__(132); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_app_app_material_module__ = __webpack_require__(130); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__services_info_service__ = __webpack_require__(43); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_9__app_component__ = __webpack_require__(129); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_10__components_dashboard_dashboard_component__ = __webpack_require__(77); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_11__components_session_details_session_details_component__ = __webpack_require__(78); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_12__components_dashboard_credentials_dialog_component__ = __webpack_require__(76); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AppModule; }); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; @@ -1761,13 +1515,13 @@ AppModule = __decorate([ /***/ }), -/***/ 170: +/***/ 132: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_router__ = __webpack_require__(166); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_app_components_dashboard_dashboard_component__ = __webpack_require__(103); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_app_components_session_details_session_details_component__ = __webpack_require__(104); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_router__ = __webpack_require__(128); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_app_components_dashboard_dashboard_component__ = __webpack_require__(77); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_app_components_session_details_session_details_component__ = __webpack_require__(78); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return routing; }); @@ -1787,7 +1541,7 @@ var routing = __WEBPACK_IMPORTED_MODULE_0__angular_router__["a" /* RouterModule /***/ }), -/***/ 171: +/***/ 133: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; @@ -1804,10 +1558,10 @@ var environment = { /***/ }), -/***/ 226: +/***/ 188: /***/ (function(module, exports, __webpack_require__) { -exports = module.exports = __webpack_require__(30)(false); +exports = module.exports = __webpack_require__(21)(false); // imports @@ -1822,10 +1576,10 @@ module.exports = module.exports.toString(); /***/ }), -/***/ 227: +/***/ 189: /***/ (function(module, exports, __webpack_require__) { -exports = module.exports = __webpack_require__(30)(false); +exports = module.exports = __webpack_require__(21)(false); // imports @@ -1840,10 +1594,10 @@ module.exports = module.exports.toString(); /***/ }), -/***/ 228: +/***/ 190: /***/ (function(module, exports, __webpack_require__) { -exports = module.exports = __webpack_require__(30)(false); +exports = module.exports = __webpack_require__(21)(false); // imports @@ -1858,28 +1612,28 @@ module.exports = module.exports.toString(); /***/ }), -/***/ 237: +/***/ 198: /***/ (function(module, exports) { module.exports = "
\n \n
" /***/ }), -/***/ 238: +/***/ 199: /***/ (function(module, exports) { -module.exports = "
\n\n
\n \n Server events\n \n lock_outline\n \n \n \n \n
    \n
  • \n

    {{i}}

    \n
  • \n
\n
\n
\n
\n\n
\n \n Test the connection\n \n \n
\n
\n
\n
\n \n
\n
\n
\n \n \n \n \n
\n
\n

{{msg}}

\n
\n
\n
\n\n
\n" +module.exports = "
\n\n
\n \n Server events\n \n lock_outline\n \n \n \n \n
    \n
  • \n

    {{i}}

    \n
  • \n
\n
\n
\n
\n\n
\n \n Test the connection\n \n \n
\n
\n
\n
\n \n
\n
\n
\n \n \n \n \n
\n
\n

{{msg}}

\n
\n
\n
\n\n
\n" /***/ }), -/***/ 239: +/***/ 200: /***/ (function(module, exports) { module.exports = "

\n session-details works!\n

\n" /***/ }), -/***/ 298: +/***/ 261: /***/ (function(module, exports) { function Mapper() { @@ -1931,7 +1685,7 @@ module.exports = Mapper; /***/ }), -/***/ 299: +/***/ 262: /***/ (function(module, exports, __webpack_require__) { /* @@ -1950,13 +1704,13 @@ module.exports = Mapper; * limitations under the License. * */ -var JsonRpcClient = __webpack_require__(300); +var JsonRpcClient = __webpack_require__(263); exports.JsonRpcClient = JsonRpcClient; /***/ }), -/***/ 300: +/***/ 263: /***/ (function(module, exports, __webpack_require__) { /* @@ -1975,8 +1729,8 @@ exports.JsonRpcClient = JsonRpcClient; * limitations under the License. * */ -var RpcBuilder = __webpack_require__(137); -var WebSocketWithReconnection = __webpack_require__(136); +var RpcBuilder = __webpack_require__(113); +var WebSocketWithReconnection = __webpack_require__(112); Date.now = Date.now || function () { return +new Date; }; @@ -2197,7 +1951,7 @@ module.exports = JsonRpcClient; /***/ }), -/***/ 301: +/***/ 264: /***/ (function(module, exports, __webpack_require__) { /* @@ -2216,13 +1970,13 @@ module.exports = JsonRpcClient; * limitations under the License. * */ -var WebSocketWithReconnection = __webpack_require__(136); +var WebSocketWithReconnection = __webpack_require__(112); exports.WebSocketWithReconnection = WebSocketWithReconnection; /***/ }), -/***/ 302: +/***/ 265: /***/ (function(module, exports) { /** @@ -2307,7 +2061,7 @@ exports.unpack = unpack; /***/ }), -/***/ 303: +/***/ 266: /***/ (function(module, exports) { function pack(message) { @@ -2324,18 +2078,18 @@ exports.unpack = unpack; /***/ }), -/***/ 304: +/***/ 267: /***/ (function(module, exports, __webpack_require__) { -var JsonRPC = __webpack_require__(302); -var XmlRPC = __webpack_require__(303); +var JsonRPC = __webpack_require__(265); +var XmlRPC = __webpack_require__(266); exports.JsonRPC = JsonRPC; exports.XmlRPC = XmlRPC; /***/ }), -/***/ 305: +/***/ 268: /***/ (function(module, exports, __webpack_require__) { /* @@ -2353,14 +2107,14 @@ exports.XmlRPC = XmlRPC; * See the License for the specific language governing permissions and * limitations under the License. */ -var freeice = __webpack_require__(229); -var inherits = __webpack_require__(117); -var UAParser = __webpack_require__(312); -var uuid = __webpack_require__(314); -var hark = __webpack_require__(231); -var EventEmitter = __webpack_require__(116).EventEmitter; -var recursive = __webpack_require__(235).recursive.bind(undefined, true); -var sdpTranslator = __webpack_require__(294); +var freeice = __webpack_require__(191); +var inherits = __webpack_require__(92); +var UAParser = __webpack_require__(275); +var uuid = __webpack_require__(277); +var hark = __webpack_require__(193); +var EventEmitter = __webpack_require__(91).EventEmitter; +var recursive = __webpack_require__(196).recursive.bind(undefined, true); +var sdpTranslator = __webpack_require__(258); var logger = window.Logger || console; // var gUM = navigator.mediaDevices.getUserMedia || function (constraints) { // return new Promise(navigator.getUserMedia(constraints, function (stream) { @@ -2368,17 +2122,17 @@ var logger = window.Logger || console; // start() // }).eror(callback)); // } -try { - __webpack_require__(234); -} -catch (error) { - if (typeof getScreenConstraints === 'undefined') { - logger.warn('screen sharing is not available'); - getScreenConstraints = function getScreenConstraints(sendSource, callback) { - callback(new Error("This library is not enabled for screen sharing")); - }; +/*try { + require('kurento-browser-extensions') +} catch (error) { + if (typeof getScreenConstraints === 'undefined') { + logger.warn('screen sharing is not available') + + getScreenConstraints = function getScreenConstraints(sendSource, callback) { + callback(new Error("This library is not enabled for screen sharing")) } -} + } +}*/ var MEDIA_CONSTRAINTS = { audio: true, video: { @@ -3004,7 +2758,7 @@ exports.hark = harkUtils; /***/ }), -/***/ 306: +/***/ 269: /***/ (function(module, exports, __webpack_require__) { /* @@ -3032,13 +2786,13 @@ exports.hark = harkUtils; * @copyright 2014 Kurento (http://kurento.org/) * @license ALv2 */ -var WebRtcPeer = __webpack_require__(305); +var WebRtcPeer = __webpack_require__(268); exports.WebRtcPeer = WebRtcPeer; /***/ }), -/***/ 307: +/***/ 270: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -3060,10 +2814,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); * limitations under the License. * */ -var OpenViduInternal_1 = __webpack_require__(309); -var Session_1 = __webpack_require__(139); -var Publisher_1 = __webpack_require__(138); -var adapter = __webpack_require__(142); +var OpenViduInternal_1 = __webpack_require__(272); +var Session_1 = __webpack_require__(115); +var Publisher_1 = __webpack_require__(114); +var adapter = __webpack_require__(118); if (window) { window["adapter"] = adapter; } @@ -3090,17 +2844,21 @@ var OpenVidu = /** @class */ (function () { if (this.checkSystemRequirements()) { if (cameraOptions != null) { var cameraOptionsAux = { - audio: cameraOptions.audio != null ? cameraOptions.audio : true, - video: cameraOptions.video != null ? cameraOptions.video : true, + sendAudio: cameraOptions.audio != null ? cameraOptions.audio : true, + sendVideo: cameraOptions.video != null ? cameraOptions.video : true, + activeAudio: cameraOptions.activeAudio != null ? cameraOptions.activeAudio : true, + activeVideo: cameraOptions.activeVideo != null ? cameraOptions.activeVideo : true, data: true, - mediaConstraints: this.openVidu.generateMediaConstraints(cameraOptions.quality) + mediaConstraints: this.openVidu.generateMediaConstraints(cameraOptions) }; cameraOptions = cameraOptionsAux; } else { cameraOptions = { - audio: true, - video: true, + sendAudio: true, + sendVideo: true, + activeAudio: true, + activeVideo: true, data: true, mediaConstraints: { audio: true, @@ -3151,7 +2909,7 @@ exports.OpenVidu = OpenVidu; /***/ }), -/***/ 308: +/***/ 271: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -3160,17 +2918,17 @@ function __export(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } Object.defineProperty(exports, "__esModule", { value: true }); -__export(__webpack_require__(307)); -__export(__webpack_require__(139)); -__export(__webpack_require__(138)); -__export(__webpack_require__(140)); -__export(__webpack_require__(86)); -__export(__webpack_require__(141)); +__export(__webpack_require__(270)); +__export(__webpack_require__(115)); +__export(__webpack_require__(114)); +__export(__webpack_require__(116)); +__export(__webpack_require__(72)); +__export(__webpack_require__(117)); /***/ }), -/***/ 309: +/***/ 272: /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -3192,9 +2950,9 @@ Object.defineProperty(exports, "__esModule", { value: true }); * limitations under the License. * */ -var SessionInternal_1 = __webpack_require__(310); -var Stream_1 = __webpack_require__(86); -var RpcBuilder = __webpack_require__(137); +var SessionInternal_1 = __webpack_require__(273); +var Stream_1 = __webpack_require__(72); +var RpcBuilder = __webpack_require__(113); var OpenViduInternal = /** @class */ (function () { function OpenViduInternal() { this.remoteStreams = []; @@ -3424,8 +3182,10 @@ var OpenViduInternal = /** @class */ (function () { return this.camera; } options = options || { - audio: true, - video: true, + sendAudio: true, + sendVideo: true, + activeAudio: true, + activeVideo: true, data: true, mediaConstraints: { audio: true, @@ -3437,18 +3197,6 @@ var OpenViduInternal = /** @class */ (function () { return this.camera; }; ; - /*joinSession(options: SessionOptions, callback: Callback) { - - this.session.configure(options); - - this.session.connect2(); - - this.session.addEventListener('room-connected', roomEvent => callback(undefined,this.session)); - - this.session.addEventListener('error-room', error => callback(error)); - - return this.session; - };*/ //CHAT OpenViduInternal.prototype.sendMessage = function (room, user, message) { this.sendRequest('sendMessage', { @@ -3480,32 +3228,37 @@ var OpenViduInternal = /** @class */ (function () { this.toggleLocalVideoTrack(false); this.toggleLocalAudioTrack(false); }; - OpenViduInternal.prototype.generateMediaConstraints = function (quality) { + OpenViduInternal.prototype.generateMediaConstraints = function (cameraOptions) { var mediaConstraints = { - audio: true, + audio: cameraOptions.audio, video: {} }; - var w, h; - switch (quality) { - case 'LOW': - w = 320; - h = 240; - break; - case 'MEDIUM': - w = 640; - h = 480; - break; - case 'HIGH': - w = 1280; - h = 720; - break; - default: - w = 640; - h = 480; + if (!cameraOptions.video) { + mediaConstraints.video = false; + } + else { + var w = void 0, h = void 0; + switch (cameraOptions.quality) { + case 'LOW': + w = 320; + h = 240; + break; + case 'MEDIUM': + w = 640; + h = 480; + break; + case 'HIGH': + w = 1280; + h = 720; + break; + default: + w = 640; + h = 480; + } + mediaConstraints.video['width'] = { exact: w }; + mediaConstraints.video['height'] = { exact: h }; + //mediaConstraints.video['frameRate'] = { ideal: Number((document.getElementById('frameRate')).value) }; } - mediaConstraints.video['width'] = { exact: w }; - mediaConstraints.video['height'] = { exact: h }; - //mediaConstraints.video['frameRate'] = { ideal: Number((document.getElementById('frameRate')).value) }; return mediaConstraints; }; return OpenViduInternal; @@ -3515,14 +3268,14 @@ exports.OpenViduInternal = OpenViduInternal; /***/ }), -/***/ 310: +/***/ 273: /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var Connection_1 = __webpack_require__(141); -var EventEmitter = __webpack_require__(40); +var Connection_1 = __webpack_require__(117); +var EventEmitter = __webpack_require__(32); var SECRET_PARAM = '?secret='; var SessionInternal = /** @class */ (function () { function SessionInternal(openVidu, sessionId) { @@ -3710,12 +3463,12 @@ var SessionInternal = /** @class */ (function () { }); }; SessionInternal.prototype.onParticipantPublished = function (options) { - options.metadata = this.participants[options.id].data; // Get the existing Connection created on 'onParticipantJoined' for // existing participants or create a new one for new participants var connection = this.participants[options.id]; if (connection) { // Update existing Connection + options.metadata = connection.data; connection.options = options; connection.initStreams(options); } @@ -3730,7 +3483,6 @@ var SessionInternal = /** @class */ (function () { else { console.debug("Remote Connection found in connections list by its id [" + pid + "]"); } - connection.creationTime = this.participants[pid].creationTime; this.participants[pid] = connection; this.ee.emitEvent('participant-published', [{ connection: connection }]); var streams = connection.getStreams(); @@ -3994,20 +3746,20 @@ exports.SessionInternal = SessionInternal; /***/ }), -/***/ 327: +/***/ 291: /***/ (function(module, exports, __webpack_require__) { -module.exports = __webpack_require__(144); +module.exports = __webpack_require__(120); /***/ }), -/***/ 55: +/***/ 43: /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__ = __webpack_require__(24); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__ = __webpack_require__(20); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs_Subject___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_rxjs_Subject__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return InfoService; }); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { @@ -4043,15 +3795,15 @@ InfoService = __decorate([ /***/ }), -/***/ 86: +/***/ 72: /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -var EventEmitter = __webpack_require__(40); -var kurentoUtils = __webpack_require__(306); -var adapter = __webpack_require__(142); +var EventEmitter = __webpack_require__(32); +var kurentoUtils = __webpack_require__(269); +var adapter = __webpack_require__(118); if (window) { window["adapter"] = adapter; } @@ -4077,7 +3829,8 @@ var Stream = /** @class */ (function () { this.localMirrored = false; this.chanId = 0; this.dataChannelOpened = false; - this.audioOnly = false; + this.activeAudio = true; + this.activeVideo = true; this.isReady = false; this.isVideoELementCreated = false; this.accessIsAllowed = false; @@ -4089,13 +3842,14 @@ var Stream = /** @class */ (function () { this.id = "webcam"; } this.connection = options.connection; - this.recvVideo = options.recvVideo; - this.recvAudio = options.recvAudio; + this.recvVideo = options.recvVideo || false; + this.recvAudio = options.recvAudio || false; + this.sendVideo = options.sendVideo; + this.sendAudio = options.sendAudio; + this.activeAudio = options.activeAudio; + this.activeVideo = options.activeVideo; this.dataChannel = options.data || false; - this.sendVideo = options.video; - this.sendAudio = options.audio; this.mediaConstraints = options.mediaConstraints; - this.audioOnly = options.audioOnly || false; this.addEventListener('src-added', function (srcEvent) { _this.videoSrcObject = srcEvent.srcObject; if (_this.video) @@ -4225,7 +3979,7 @@ var Stream = /** @class */ (function () { }); if (this.local && !this.displayMyRemote()) { this.video.muted = true; - this.video.onplay = function () { + this.video.onplaying = function () { console.info("Local 'Stream' with id [" + _this.getId() + "] video is now playing"); _this.ee.emitEvent('video-is-playing', [{ element: _this.video @@ -4307,7 +4061,6 @@ var Stream = /** @class */ (function () { if (!hasVideo) { constraints.video = false; _this.sendVideo = false; - _this.audioOnly = true; _this.requestCameraAccesAux(constraints, callback); } else { @@ -4322,21 +4075,20 @@ var Stream = /** @class */ (function () { _this.cameraAccessSuccess(userStream, callback); }) .catch(function (error) { - // Try to ask for microphone only + /*// Try to ask for microphone only navigator.mediaDevices.getUserMedia({ audio: true, video: false }) - .then(function (userStream) { - constraints.video = false; - _this.sendVideo = false; - _this.audioOnly = true; - _this.cameraAccessSuccess(userStream, callback); - }) - .catch(function (error) { - _this.accessIsDenied = true; - _this.accessIsAllowed = false; - _this.ee.emitEvent('access-denied-by-publisher'); - console.error("Access denied", error); - callback(error, _this); - }); + .then(userStream => { + constraints.video = false; + this.sendVideo = false; + this.sendAudio = true; + this.cameraAccessSuccess(userStream, callback); + }) + .catch(error => {*/ + _this.accessIsDenied = true; + _this.accessIsAllowed = false; + _this.ee.emitEvent('access-denied-by-publisher'); + console.error("Access denied", error); + callback(error, _this); }); }; Stream.prototype.cameraAccessSuccess = function (userStream, callback) { @@ -4344,10 +4096,10 @@ var Stream = /** @class */ (function () { this.accessIsDenied = false; this.ee.emitEvent('access-allowed-by-publisher'); if (userStream.getAudioTracks()[0] != null) { - userStream.getAudioTracks()[0].enabled = this.sendAudio; + userStream.getAudioTracks()[0].enabled = this.activeAudio; } if (userStream.getVideoTracks()[0] != null) { - userStream.getVideoTracks()[0].enabled = this.sendVideo; + userStream.getVideoTracks()[0].enabled = this.activeVideo; } this.wrStream = userStream; this.emitSrcEvent(this.wrStream); @@ -4372,7 +4124,8 @@ var Stream = /** @class */ (function () { this.openVidu.sendRequest("publishVideo", { sdpOffer: sdpOfferParam, doLoopback: this.displayMyRemote() || false, - audioOnly: this.audioOnly + audioActive: this.sendAudio, + videoActive: this.sendVideo }, function (error, response) { if (error) { console.error("Error on publishVideo: " + JSON.stringify(error)); @@ -4443,7 +4196,7 @@ var Stream = /** @class */ (function () { else { var offerConstraints = { audio: this.recvAudio, - video: !this.audioOnly + video: this.recvVideo }; console.debug("'Session.subscribe(Stream)' called. Constraints of generate SDP offer", offerConstraints); var options = { @@ -4498,26 +4251,28 @@ var Stream = /** @class */ (function () { console.debug("Peer remote stream", _this.wrStream); if (_this.wrStream != undefined) { _this.emitSrcEvent(_this.wrStream); - _this.speechEvent = kurentoUtils.WebRtcPeer.hark(_this.wrStream, { threshold: _this.room.thresholdSpeaker }); - _this.speechEvent.on('speaking', function () { - _this.room.addParticipantSpeaking(participantId); - _this.room.emitEvent('stream-speaking', [{ - participantId: participantId - }]); - }); - _this.speechEvent.on('stopped_speaking', function () { - _this.room.removeParticipantSpeaking(participantId); - _this.room.emitEvent('stream-stopped-speaking', [{ - participantId: participantId - }]); - }); + if (_this.wrStream.getAudioTracks()[0] != null) { + _this.speechEvent = kurentoUtils.WebRtcPeer.hark(_this.wrStream, { threshold: _this.room.thresholdSpeaker }); + _this.speechEvent.on('speaking', function () { + _this.room.addParticipantSpeaking(participantId); + _this.room.emitEvent('stream-speaking', [{ + participantId: participantId + }]); + }); + _this.speechEvent.on('stopped_speaking', function () { + _this.room.removeParticipantSpeaking(participantId); + _this.room.emitEvent('stream-stopped-speaking', [{ + participantId: participantId + }]); + }); + } } for (var _i = 0, _a = _this.videoElements; _i < _a.length; _i++) { var videoElement = _a[_i]; var thumbnailId = videoElement.thumb; var video = videoElement.video; video.srcObject = _this.wrStream; - video.onplay = function () { + video.onplaying = function () { if (_this.local && _this.displayMyRemote()) { console.info("Your own remote 'Stream' with id [" + _this.getId() + "] video is now playing"); _this.ee.emitEvent('remote-video-is-playing', [{ @@ -4594,7 +4349,256 @@ var Stream = /** @class */ (function () { exports.Stream = Stream; +/***/ }), + +/***/ 76: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(2); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return CredentialsDialogComponent; }); +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; + +var CredentialsDialogComponent = (function () { + function CredentialsDialogComponent() { + } + CredentialsDialogComponent.prototype.testVideo = function () { + this.myReference.close(this.secret); + }; + return CredentialsDialogComponent; +}()); +CredentialsDialogComponent = __decorate([ + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_5" /* Component */])({ + selector: 'app-credentials-dialog', + template: "\n
\n

\n Insert your secret\n

\n
\n \n \n \n \n \n \n \n \n \n
\n
\n ", + styles: ["\n #quality-div {\n margin-top: 20px;\n }\n #join-div {\n margin-top: 25px;\n margin-bottom: 20px;\n }\n #quality-tag {\n display: block;\n }\n h5 {\n margin-bottom: 10px;\n text-align: left;\n }\n #joinWithVideo {\n margin-right: 50px;\n }\n md-dialog-actions {\n display: block;\n }\n #join-btn {\n float: right;\n }\n "], + }), + __metadata("design:paramtypes", []) +], CredentialsDialogComponent); + +//# sourceMappingURL=credentials-dialog.component.js.map + +/***/ }), + +/***/ 77: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_material__ = __webpack_require__(75); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__services_info_service__ = __webpack_require__(43); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_openvidu_browser__ = __webpack_require__(271); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_openvidu_browser___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_openvidu_browser__); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__credentials_dialog_component__ = __webpack_require__(76); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return DashboardComponent; }); +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; + + + + + +var DashboardComponent = (function () { + function DashboardComponent(infoService, dialog) { + var _this = this; + this.infoService = infoService; + this.dialog = dialog; + this.lockScroll = false; + this.info = []; + this.testStatus = 'DISCONNECTED'; + this.testButton = 'Test'; + this.tickClass = 'trigger'; + this.showSpinner = false; + this.msgChain = []; + // Subscription to info updated event raised by InfoService + this.infoSubscription = this.infoService.newInfo$.subscribe(function (info) { + _this.info.push(info); + _this.scrollToBottom(); + }); + } + DashboardComponent.prototype.ngOnInit = function () { + }; + DashboardComponent.prototype.beforeunloadHandler = function () { + // On window closed leave test session + if (this.session) { + this.endTestVideo(); + } + }; + DashboardComponent.prototype.ngOnDestroy = function () { + // On component destroyed leave test session + if (this.session) { + this.endTestVideo(); + } + }; + DashboardComponent.prototype.toggleTestVideo = function () { + if (!this.session) { + this.testVideo(); + } + else { + this.endTestVideo(); + } + }; + DashboardComponent.prototype.testVideo = function () { + var _this = this; + var dialogRef; + dialogRef = this.dialog.open(__WEBPACK_IMPORTED_MODULE_4__credentials_dialog_component__["a" /* CredentialsDialogComponent */]); + dialogRef.componentInstance.myReference = dialogRef; + dialogRef.afterClosed().subscribe(function (secret) { + if (secret) { + _this.connectToSession('wss://' + location.hostname + ':8443/testSession?secret=' + secret); + } + }); + }; + DashboardComponent.prototype.connectToSession = function (mySessionId) { + var _this = this; + this.msgChain = []; + var OV = new __WEBPACK_IMPORTED_MODULE_3_openvidu_browser__["OpenVidu"](); + this.session = OV.initSession(mySessionId); + this.testStatus = 'CONNECTING'; + this.testButton = 'Testing...'; + this.session.connect('token', function (error) { + if (!error) { + _this.testStatus = 'CONNECTED'; + var publisherRemote = OV.initPublisher('mirrored-video', { + audio: true, + video: true, + audioActive: true, + videoActive: true, + quality: 'MEDIUM' + }); + publisherRemote.on('accessAllowed', function () { + _this.msgChain.push('Camera access allowed'); + }); + publisherRemote.on('accessDenied', function () { + _this.endTestVideo(); + _this.msgChain.push('Camera access denied'); + }); + publisherRemote.on('videoElementCreated', function (video) { + _this.showSpinner = true; + _this.msgChain.push('Video element created'); + }); + publisherRemote.on('remoteVideoPlaying', function (video) { + _this.msgChain.push('Remote video playing'); + _this.testButton = 'End test'; + _this.testStatus = 'PLAYING'; + _this.showSpinner = false; + }); + publisherRemote.subscribeToRemote(); + _this.session.publish(publisherRemote); + } + else { + if (error.code === 401) { + _this.endTestVideo(); + var dialogRef = void 0; + dialogRef = _this.dialog.open(__WEBPACK_IMPORTED_MODULE_4__credentials_dialog_component__["a" /* CredentialsDialogComponent */]); + dialogRef.componentInstance.myReference = dialogRef; + dialogRef.afterClosed().subscribe(function (secret) { + if (secret) { + _this.connectToSession('wss://' + location.hostname + ':8443/testSession?secret=' + secret); + } + }); + } + else { + console.error(error); + } + } + }); + }; + DashboardComponent.prototype.endTestVideo = function () { + this.session.disconnect(); + this.session = null; + this.testStatus = 'DISCONNECTED'; + this.testButton = 'Test'; + this.showSpinner = false; + this.info = []; + this.msgChain = []; + }; + DashboardComponent.prototype.scrollToBottom = function () { + try { + if (!this.lockScroll) { + this.myScrollContainer.nativeElement.scrollTop = this.myScrollContainer.nativeElement.scrollHeight; + } + } + catch (err) { + console.error('[Error]:' + err.toString()); + } + }; + return DashboardComponent; +}()); +__decorate([ + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_8" /* ViewChild */])('scrollMe'), + __metadata("design:type", typeof (_a = typeof __WEBPACK_IMPORTED_MODULE_0__angular_core__["l" /* ElementRef */] !== "undefined" && __WEBPACK_IMPORTED_MODULE_0__angular_core__["l" /* ElementRef */]) === "function" && _a || Object) +], DashboardComponent.prototype, "myScrollContainer", void 0); +__decorate([ + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_13" /* HostListener */])('window:beforeunload'), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", void 0) +], DashboardComponent.prototype, "beforeunloadHandler", null); +DashboardComponent = __decorate([ + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_5" /* Component */])({ + selector: 'app-dashboard', + template: __webpack_require__(199), + styles: [__webpack_require__(189)], + }), + __metadata("design:paramtypes", [typeof (_b = typeof __WEBPACK_IMPORTED_MODULE_2__services_info_service__["a" /* InfoService */] !== "undefined" && __WEBPACK_IMPORTED_MODULE_2__services_info_service__["a" /* InfoService */]) === "function" && _b || Object, typeof (_c = typeof __WEBPACK_IMPORTED_MODULE_1__angular_material__["j" /* MdDialog */] !== "undefined" && __WEBPACK_IMPORTED_MODULE_1__angular_material__["j" /* MdDialog */]) === "function" && _c || Object]) +], DashboardComponent); + +var _a, _b, _c; +//# sourceMappingURL=dashboard.component.js.map + +/***/ }), + +/***/ 78: +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(2); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return SessionDetailsComponent; }); +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; + +var SessionDetailsComponent = (function () { + function SessionDetailsComponent() { + } + SessionDetailsComponent.prototype.ngOnInit = function () { + }; + return SessionDetailsComponent; +}()); +SessionDetailsComponent = __decorate([ + __webpack_require__.i(__WEBPACK_IMPORTED_MODULE_0__angular_core__["_5" /* Component */])({ + selector: 'app-session-details', + template: __webpack_require__(200), + styles: [__webpack_require__(190)] + }), + __metadata("design:paramtypes", []) +], SessionDetailsComponent); + +//# sourceMappingURL=session-details.component.js.map + /***/ }) -},[327]); +},[291]); //# sourceMappingURL=main.bundle.js.map \ No newline at end of file diff --git a/openvidu-server/src/main/resources/static/main.bundle.js.map b/openvidu-server/src/main/resources/static/main.bundle.js.map index f330239d..4ab5dcda 100644 --- a/openvidu-server/src/main/resources/static/main.bundle.js.map +++ b/openvidu-server/src/main/resources/static/main.bundle.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./src/app/components/dashboard/credentials-dialog.component.ts","webpack:///./src/app/components/dashboard/dashboard.component.ts","webpack:///./src/app/components/session-details/session-details.component.ts","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/clients/transports/webSocketWithReconnection.js","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/index.js","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenVidu/Publisher.ts","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenVidu/Session.ts","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenVidu/Subscriber.ts","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenViduInternal/Connection.ts","webpack:///./src async","webpack:///./src/main.ts","webpack:///./src/app/app.component.ts","webpack:///./src/app/app.material.module.ts","webpack:///./src/app/app.module.ts","webpack:///./src/app/app.routing.ts","webpack:///./src/environments/environment.ts","webpack:///./src/app/app.component.css","webpack:///./src/app/components/dashboard/dashboard.component.css","webpack:///./src/app/components/session-details/session-details.component.css","webpack:///./src/app/app.component.html","webpack:///./src/app/components/dashboard/dashboard.component.html","webpack:///./src/app/components/session-details/session-details.component.html","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/Mapper.js","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/clients/index.js","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/clients/jsonrpcclient.js","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/clients/transports/index.js","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/packers/JsonRPC.js","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/packers/XmlRPC.js","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/packers/index.js","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-utils-js/WebRtcPeer.js","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-utils-js/index.js","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenVidu/OpenVidu.ts","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenVidu/index.ts","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenViduInternal/OpenViduInternal.ts","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenViduInternal/SessionInternal.ts","webpack:///./src/app/services/info.service.ts","webpack:////home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenViduInternal/Stream.ts"],"names":[],"mappings":"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","file":"main.bundle.js","sourcesContent":["import { Component } from '@angular/core';\nimport { MdDialogRef } from '@angular/material';\n\n@Component({\n selector: 'app-credentials-dialog',\n template: `\n
\n

\n Insert your secret\n

\n
\n \n \n \n \n \n \n \n \n \n
\n
\n `,\n styles: [`\n #quality-div {\n margin-top: 20px;\n }\n #join-div {\n margin-top: 25px;\n margin-bottom: 20px;\n }\n #quality-tag {\n display: block;\n }\n h5 {\n margin-bottom: 10px;\n text-align: left;\n }\n #joinWithVideo {\n margin-right: 50px;\n }\n md-dialog-actions {\n display: block;\n }\n #join-btn {\n float: right;\n }\n `],\n})\nexport class CredentialsDialogComponent {\n\n public myReference: MdDialogRef;\n secret: string;\n\n constructor() { }\n\n testVideo() {\n this.myReference.close(this.secret);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/components/dashboard/credentials-dialog.component.ts","import { Component, OnInit, ViewChild, ElementRef, HostListener, OnDestroy } from '@angular/core';\nimport { MdDialog, MdDialogRef } from '@angular/material';\nimport { Subscription } from 'rxjs/Subscription';\n\nimport { InfoService } from '../../services/info.service';\n\nimport { OpenVidu, Session } from 'openvidu-browser';\nimport { CredentialsDialogComponent } from './credentials-dialog.component';\n\ndeclare const $;\n\n@Component({\n selector: 'app-dashboard',\n templateUrl: './dashboard.component.html',\n styleUrls: ['./dashboard.component.css'],\n})\nexport class DashboardComponent implements OnInit, OnDestroy {\n\n @ViewChild('scrollMe') private myScrollContainer: ElementRef;\n lockScroll = false;\n\n infoSubscription: Subscription;\n info = [];\n\n session: Session;\n\n testStatus = 'DISCONNECTED';\n testButton = 'Test';\n tickClass = 'trigger';\n showSpinner = false;\n msgChain = [];\n\n constructor(private infoService: InfoService, public dialog: MdDialog) {\n // Subscription to info updated event raised by InfoService\n this.infoSubscription = this.infoService.newInfo$.subscribe(\n info => {\n this.info.push(info);\n this.scrollToBottom();\n });\n }\n\n ngOnInit() {\n\n }\n\n @HostListener('window:beforeunload')\n beforeunloadHandler() {\n // On window closed leave test session\n if (this.session) {\n this.endTestVideo();\n }\n }\n\n ngOnDestroy() {\n // On component destroyed leave test session\n if (this.session) {\n this.endTestVideo();\n }\n }\n\n toggleTestVideo() {\n if (!this.session) {\n this.testVideo();\n } else {\n this.endTestVideo();\n }\n }\n\n testVideo() {\n let dialogRef: MdDialogRef;\n dialogRef = this.dialog.open(CredentialsDialogComponent);\n dialogRef.componentInstance.myReference = dialogRef;\n\n dialogRef.afterClosed().subscribe(secret => {\n if (secret) {\n this.connectToSession('wss://' + location.hostname + ':8443/testSession?secret=' + secret);\n }\n });\n }\n\n connectToSession(mySessionId: string) {\n this.msgChain = [];\n\n const OV = new OpenVidu();\n this.session = OV.initSession(mySessionId);\n\n this.testStatus = 'CONNECTING';\n this.testButton = 'Testing...';\n\n this.session.connect('token', (error) => {\n if (!error) {\n\n this.testStatus = 'CONNECTED';\n\n const publisherRemote = OV.initPublisher('mirrored-video', {\n audio: true,\n video: true,\n quality: 'MEDIUM'\n });\n\n publisherRemote.on('accessAllowed', () => {\n this.msgChain.push('Camera access allowed');\n });\n\n publisherRemote.on('accessDenied', () => {\n this.endTestVideo();\n this.msgChain.push('Camera access denied');\n });\n\n publisherRemote.on('videoElementCreated', (video) => {\n this.showSpinner = true;\n this.msgChain.push('Video element created');\n });\n\n publisherRemote.on('remoteVideoPlaying', (video) => {\n this.msgChain.push('Remote video playing');\n this.testButton = 'End test';\n this.testStatus = 'PLAYING';\n this.showSpinner = false;\n });\n\n publisherRemote.subscribeToRemote();\n this.session.publish(publisherRemote);\n } else {\n if (error.code === 401) { // User unauthorized error. OpenVidu security is active\n this.endTestVideo();\n let dialogRef: MdDialogRef;\n dialogRef = this.dialog.open(CredentialsDialogComponent);\n dialogRef.componentInstance.myReference = dialogRef;\n\n dialogRef.afterClosed().subscribe(secret => {\n if (secret) {\n this.connectToSession('wss://' + location.hostname + ':8443/testSession?secret=' + secret);\n }\n });\n } else {\n console.error(error);\n }\n }\n });\n }\n\n endTestVideo() {\n this.session.disconnect();\n this.session = null;\n this.testStatus = 'DISCONNECTED';\n this.testButton = 'Test';\n this.showSpinner = false;\n this.info = [];\n this.msgChain = [];\n }\n\n scrollToBottom(): void {\n try {\n if (!this.lockScroll) {\n this.myScrollContainer.nativeElement.scrollTop = this.myScrollContainer.nativeElement.scrollHeight;\n }\n } catch (err) {\n console.error('[Error]:' + err.toString());\n }\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/components/dashboard/dashboard.component.ts","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-session-details',\n templateUrl: './session-details.component.html',\n styleUrls: ['./session-details.component.css']\n})\nexport class SessionDetailsComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit() {\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/components/session-details/session-details.component.ts","/*\n * (C) Copyright 2013-2015 Kurento (http://kurento.org/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\"use strict\";\n\nvar BrowserWebSocket = global.WebSocket || global.MozWebSocket;\n\nvar Logger = console;\n\n/**\n * Get either the `WebSocket` or `MozWebSocket` globals\n * in the browser or try to resolve WebSocket-compatible\n * interface exposed by `ws` for Node-like environment.\n */\n\n/*var WebSocket = BrowserWebSocket;\nif (!WebSocket && typeof window === 'undefined') {\n try {\n WebSocket = require('ws');\n } catch (e) { }\n}*/\n\n//var SockJS = require('sockjs-client');\n\nvar MAX_RETRIES = 2000; // Forever...\nvar RETRY_TIME_MS = 3000; // FIXME: Implement exponential wait times...\n\nvar CONNECTING = 0;\nvar OPEN = 1;\nvar CLOSING = 2;\nvar CLOSED = 3;\n\n/*\nconfig = {\n\t\turi : wsUri,\n\t\tuseSockJS : true (use SockJS) / false (use WebSocket) by default,\n\t\tonconnected : callback method to invoke when connection is successful,\n\t\tondisconnect : callback method to invoke when the connection is lost,\n\t\tonreconnecting : callback method to invoke when the client is reconnecting,\n\t\tonreconnected : callback method to invoke when the client succesfully reconnects,\n\t};\n*/\nfunction WebSocketWithReconnection(config) {\n\n var closing = false;\n var registerMessageHandler;\n var wsUri = config.uri;\n var useSockJS = config.useSockJS;\n var reconnecting = false;\n\n var forcingDisconnection = false;\n\n var ws;\n\n if (useSockJS) {\n ws = new SockJS(wsUri);\n } else {\n ws = new WebSocket(wsUri);\n }\n\n ws.onopen = function() {\n logConnected(ws, wsUri);\n if (config.onconnected) {\n config.onconnected();\n }\n };\n\n ws.onerror = function(error) {\n Logger.error(\"Could not connect to \" + wsUri + \" (invoking onerror if defined)\", error);\n if (config.onerror) {\n config.onerror(error);\n }\n };\n\n function logConnected(ws, wsUri) {\n try {\n Logger.debug(\"WebSocket connected to \" + wsUri);\n } catch (e) {\n Logger.error(e);\n }\n }\n\n var reconnectionOnClose = function() {\n if (ws.readyState === CLOSED) {\n if (closing) {\n Logger.debug(\"Connection closed by user\");\n } else {\n Logger.debug(\"Connection closed unexpectecly. Reconnecting...\");\n reconnectToSameUri(MAX_RETRIES, 1);\n }\n } else {\n Logger.debug(\"Close callback from previous websocket. Ignoring it\");\n }\n };\n\n ws.onclose = reconnectionOnClose;\n\n function reconnectToSameUri(maxRetries, numRetries) {\n Logger.debug(\"reconnectToSameUri (attempt #\" + numRetries + \", max=\" + maxRetries + \")\");\n\n if (numRetries === 1) {\n if (reconnecting) {\n Logger.warn(\"Trying to reconnectToNewUri when reconnecting... Ignoring this reconnection.\")\n return;\n } else {\n reconnecting = true;\n }\n\n if (config.onreconnecting) {\n config.onreconnecting();\n }\n }\n\n if (forcingDisconnection) {\n reconnectToNewUri(maxRetries, numRetries, wsUri);\n\n } else {\n if (config.newWsUriOnReconnection) {\n config.newWsUriOnReconnection(function(error, newWsUri) {\n\n if (error) {\n Logger.debug(error);\n setTimeout(function() {\n reconnectToSameUri(maxRetries, numRetries + 1);\n }, RETRY_TIME_MS);\n } else {\n reconnectToNewUri(maxRetries, numRetries, newWsUri);\n }\n })\n } else {\n reconnectToNewUri(maxRetries, numRetries, wsUri);\n }\n }\n }\n\n // TODO Test retries. How to force not connection?\n function reconnectToNewUri(maxRetries, numRetries, reconnectWsUri) {\n Logger.debug(\"Reconnection attempt #\" + numRetries);\n\n ws.close();\n\n wsUri = reconnectWsUri || wsUri;\n\n var newWs;\n if (useSockJS) {\n newWs = new SockJS(wsUri);\n } else {\n newWs = new WebSocket(wsUri);\n }\n\n newWs.onopen = function() {\n Logger.debug(\"Reconnected after \" + numRetries + \" attempts...\");\n logConnected(newWs, wsUri);\n reconnecting = false;\n registerMessageHandler();\n if (config.onreconnected()) {\n config.onreconnected();\n }\n\n newWs.onclose = reconnectionOnClose;\n };\n\n var onErrorOrClose = function(error) {\n Logger.warn(\"Reconnection error: \", error);\n\n if (numRetries === maxRetries) {\n if (config.ondisconnect) {\n config.ondisconnect();\n }\n } else {\n setTimeout(function() {\n reconnectToSameUri(maxRetries, numRetries + 1);\n }, RETRY_TIME_MS);\n }\n };\n\n newWs.onerror = onErrorOrClose;\n\n ws = newWs;\n }\n\n this.close = function() {\n closing = true;\n ws.close();\n };\n\n\n // This method is only for testing\n this.forceClose = function(millis) {\n Logger.debug(\"Testing: Force WebSocket close\");\n\n if (millis) {\n Logger.debug(\"Testing: Change wsUri for \" + millis + \" millis to simulate net failure\");\n var goodWsUri = wsUri;\n wsUri = \"wss://21.234.12.34.4:443/\";\n\n forcingDisconnection = true;\n\n setTimeout(function() {\n Logger.debug(\"Testing: Recover good wsUri \" + goodWsUri);\n wsUri = goodWsUri;\n\n forcingDisconnection = false;\n\n }, millis);\n }\n\n ws.close();\n };\n\n this.reconnectWs = function() {\n Logger.debug(\"reconnectWs\");\n reconnectToSameUri(MAX_RETRIES, 1, wsUri);\n };\n\n this.send = function(message) {\n ws.send(message);\n };\n\n this.addEventListener = function(type, callback) {\n registerMessageHandler = function() {\n ws.addEventListener(type, callback);\n };\n\n registerMessageHandler();\n };\n}\n\nmodule.exports = WebSocketWithReconnection;\n\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/clients/transports/webSocketWithReconnection.js","/*\n * (C) Copyright 2014 Kurento (http://kurento.org/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n\nvar defineProperty_IE8 = false\nif(Object.defineProperty)\n{\n try\n {\n Object.defineProperty({}, \"x\", {});\n }\n catch(e)\n {\n defineProperty_IE8 = true\n }\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind\nif (!Function.prototype.bind) {\n Function.prototype.bind = function(oThis) {\n if (typeof this !== 'function') {\n // closest thing possible to the ECMAScript 5\n // internal IsCallable function\n throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');\n }\n\n var aArgs = Array.prototype.slice.call(arguments, 1),\n fToBind = this,\n fNOP = function() {},\n fBound = function() {\n return fToBind.apply(this instanceof fNOP && oThis\n ? this\n : oThis,\n aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n fNOP.prototype = this.prototype;\n fBound.prototype = new fNOP();\n\n return fBound;\n };\n}\n\n\nvar EventEmitter = require('events').EventEmitter;\n\nvar inherits = require('inherits');\n\nvar packers = require('./packers');\nvar Mapper = require('./Mapper');\n\n\nvar BASE_TIMEOUT = 5000;\n\n\nfunction unifyResponseMethods(responseMethods)\n{\n if(!responseMethods) return {};\n\n for(var key in responseMethods)\n {\n var value = responseMethods[key];\n\n if(typeof value == 'string')\n responseMethods[key] =\n {\n response: value\n }\n };\n\n return responseMethods;\n};\n\nfunction unifyTransport(transport)\n{\n if(!transport) return;\n\n // Transport as a function\n if(transport instanceof Function)\n return {send: transport};\n\n // WebSocket & DataChannel\n if(transport.send instanceof Function)\n return transport;\n\n // Message API (Inter-window & WebWorker)\n if(transport.postMessage instanceof Function)\n {\n transport.send = transport.postMessage;\n return transport;\n }\n\n // Stream API\n if(transport.write instanceof Function)\n {\n transport.send = transport.write;\n return transport;\n }\n\n // Transports that only can receive messages, but not send\n if(transport.onmessage !== undefined) return;\n if(transport.pause instanceof Function) return;\n\n throw new SyntaxError(\"Transport is not a function nor a valid object\");\n};\n\n\n/**\n * Representation of a RPC notification\n *\n * @class\n *\n * @constructor\n *\n * @param {String} method -method of the notification\n * @param params - parameters of the notification\n */\nfunction RpcNotification(method, params)\n{\n if(defineProperty_IE8)\n {\n this.method = method\n this.params = params\n }\n else\n {\n Object.defineProperty(this, 'method', {value: method, enumerable: true});\n Object.defineProperty(this, 'params', {value: params, enumerable: true});\n }\n};\n\n\n/**\n * @class\n *\n * @constructor\n *\n * @param {object} packer\n *\n * @param {object} [options]\n *\n * @param {object} [transport]\n *\n * @param {Function} [onRequest]\n */\nfunction RpcBuilder(packer, options, transport, onRequest)\n{\n var self = this;\n\n if(!packer)\n throw new SyntaxError('Packer is not defined');\n\n if(!packer.pack || !packer.unpack)\n throw new SyntaxError('Packer is invalid');\n\n var responseMethods = unifyResponseMethods(packer.responseMethods);\n\n\n if(options instanceof Function)\n {\n if(transport != undefined)\n throw new SyntaxError(\"There can't be parameters after onRequest\");\n\n onRequest = options;\n transport = undefined;\n options = undefined;\n };\n\n if(options && options.send instanceof Function)\n {\n if(transport && !(transport instanceof Function))\n throw new SyntaxError(\"Only a function can be after transport\");\n\n onRequest = transport;\n transport = options;\n options = undefined;\n };\n\n if(transport instanceof Function)\n {\n if(onRequest != undefined)\n throw new SyntaxError(\"There can't be parameters after onRequest\");\n\n onRequest = transport;\n transport = undefined;\n };\n\n if(transport && transport.send instanceof Function)\n if(onRequest && !(onRequest instanceof Function))\n throw new SyntaxError(\"Only a function can be after transport\");\n\n options = options || {};\n\n\n EventEmitter.call(this);\n\n if(onRequest)\n this.on('request', onRequest);\n\n\n if(defineProperty_IE8)\n this.peerID = options.peerID\n else\n Object.defineProperty(this, 'peerID', {value: options.peerID});\n\n var max_retries = options.max_retries || 0;\n\n\n function transportMessage(event)\n {\n self.decode(event.data || event);\n };\n\n this.getTransport = function()\n {\n return transport;\n }\n this.setTransport = function(value)\n {\n // Remove listener from old transport\n if(transport)\n {\n // W3C transports\n if(transport.removeEventListener)\n transport.removeEventListener('message', transportMessage);\n\n // Node.js Streams API\n else if(transport.removeListener)\n transport.removeListener('data', transportMessage);\n };\n\n // Set listener on new transport\n if(value)\n {\n // W3C transports\n if(value.addEventListener)\n value.addEventListener('message', transportMessage);\n\n // Node.js Streams API\n else if(value.addListener)\n value.addListener('data', transportMessage);\n };\n\n transport = unifyTransport(value);\n }\n\n if(!defineProperty_IE8)\n Object.defineProperty(this, 'transport',\n {\n get: this.getTransport.bind(this),\n set: this.setTransport.bind(this)\n })\n\n this.setTransport(transport);\n\n\n var request_timeout = options.request_timeout || BASE_TIMEOUT;\n var ping_request_timeout = options.ping_request_timeout || request_timeout;\n var response_timeout = options.response_timeout || BASE_TIMEOUT;\n var duplicates_timeout = options.duplicates_timeout || BASE_TIMEOUT;\n\n\n var requestID = 0;\n\n var requests = new Mapper();\n var responses = new Mapper();\n var processedResponses = new Mapper();\n\n var message2Key = {};\n\n\n /**\n * Store the response to prevent to process duplicate request later\n */\n function storeResponse(message, id, dest)\n {\n var response =\n {\n message: message,\n /** Timeout to auto-clean old responses */\n timeout: setTimeout(function()\n {\n responses.remove(id, dest);\n },\n response_timeout)\n };\n\n responses.set(response, id, dest);\n };\n\n /**\n * Store the response to ignore duplicated messages later\n */\n function storeProcessedResponse(ack, from)\n {\n var timeout = setTimeout(function()\n {\n processedResponses.remove(ack, from);\n },\n duplicates_timeout);\n\n processedResponses.set(timeout, ack, from);\n };\n\n\n /**\n * Representation of a RPC request\n *\n * @class\n * @extends RpcNotification\n *\n * @constructor\n *\n * @param {String} method -method of the notification\n * @param params - parameters of the notification\n * @param {Integer} id - identifier of the request\n * @param [from] - source of the notification\n */\n function RpcRequest(method, params, id, from, transport)\n {\n RpcNotification.call(this, method, params);\n\n this.getTransport = function()\n {\n return transport;\n }\n this.setTransport = function(value)\n {\n transport = unifyTransport(value);\n }\n\n if(!defineProperty_IE8)\n Object.defineProperty(this, 'transport',\n {\n get: this.getTransport.bind(this),\n set: this.setTransport.bind(this)\n })\n\n var response = responses.get(id, from);\n\n /**\n * @constant {Boolean} duplicated\n */\n if(!(transport || self.getTransport()))\n {\n if(defineProperty_IE8)\n this.duplicated = Boolean(response)\n else\n Object.defineProperty(this, 'duplicated',\n {\n value: Boolean(response)\n });\n }\n\n var responseMethod = responseMethods[method];\n\n this.pack = packer.pack.bind(packer, this, id)\n\n /**\n * Generate a response to this request\n *\n * @param {Error} [error]\n * @param {*} [result]\n *\n * @returns {string}\n */\n this.reply = function(error, result, transport)\n {\n // Fix optional parameters\n if(error instanceof Function || error && error.send instanceof Function)\n {\n if(result != undefined)\n throw new SyntaxError(\"There can't be parameters after callback\");\n\n transport = error;\n result = null;\n error = undefined;\n }\n\n else if(result instanceof Function\n || result && result.send instanceof Function)\n {\n if(transport != undefined)\n throw new SyntaxError(\"There can't be parameters after callback\");\n\n transport = result;\n result = null;\n };\n\n transport = unifyTransport(transport);\n\n // Duplicated request, remove old response timeout\n if(response)\n clearTimeout(response.timeout);\n\n if(from != undefined)\n {\n if(error)\n error.dest = from;\n\n if(result)\n result.dest = from;\n };\n\n var message;\n\n // New request or overriden one, create new response with provided data\n if(error || result != undefined)\n {\n if(self.peerID != undefined)\n {\n if(error)\n error.from = self.peerID;\n else\n result.from = self.peerID;\n }\n\n // Protocol indicates that responses has own request methods\n if(responseMethod)\n {\n if(responseMethod.error == undefined && error)\n message =\n {\n error: error\n };\n\n else\n {\n var method = error\n ? responseMethod.error\n : responseMethod.response;\n\n message =\n {\n method: method,\n params: error || result\n };\n }\n }\n else\n message =\n {\n error: error,\n result: result\n };\n\n message = packer.pack(message, id);\n }\n\n // Duplicate & not-overriden request, re-send old response\n else if(response)\n message = response.message;\n\n // New empty reply, response null value\n else\n message = packer.pack({result: null}, id);\n\n // Store the response to prevent to process a duplicated request later\n storeResponse(message, id, from);\n\n // Return the stored response so it can be directly send back\n transport = transport || this.getTransport() || self.getTransport();\n\n if(transport)\n return transport.send(message);\n\n return message;\n }\n };\n inherits(RpcRequest, RpcNotification);\n\n\n function cancel(message)\n {\n var key = message2Key[message];\n if(!key) return;\n\n delete message2Key[message];\n\n var request = requests.pop(key.id, key.dest);\n if(!request) return;\n\n clearTimeout(request.timeout);\n\n // Start duplicated responses timeout\n storeProcessedResponse(key.id, key.dest);\n };\n\n /**\n * Allow to cancel a request and don't wait for a response\n *\n * If `message` is not given, cancel all the request\n */\n this.cancel = function(message)\n {\n if(message) return cancel(message);\n\n for(var message in message2Key)\n cancel(message);\n };\n\n\n this.close = function()\n {\n // Prevent to receive new messages\n var transport = this.getTransport();\n if(transport && transport.close)\n transport.close();\n\n // Request & processed responses\n this.cancel();\n\n processedResponses.forEach(clearTimeout);\n\n // Responses\n responses.forEach(function(response)\n {\n clearTimeout(response.timeout);\n });\n };\n\n\n /**\n * Generates and encode a JsonRPC 2.0 message\n *\n * @param {String} method -method of the notification\n * @param params - parameters of the notification\n * @param [dest] - destination of the notification\n * @param {object} [transport] - transport where to send the message\n * @param [callback] - function called when a response to this request is\n * received. If not defined, a notification will be send instead\n *\n * @returns {string} A raw JsonRPC 2.0 request or notification string\n */\n this.encode = function(method, params, dest, transport, callback)\n {\n // Fix optional parameters\n if(params instanceof Function)\n {\n if(dest != undefined)\n throw new SyntaxError(\"There can't be parameters after callback\");\n\n callback = params;\n transport = undefined;\n dest = undefined;\n params = undefined;\n }\n\n else if(dest instanceof Function)\n {\n if(transport != undefined)\n throw new SyntaxError(\"There can't be parameters after callback\");\n\n callback = dest;\n transport = undefined;\n dest = undefined;\n }\n\n else if(transport instanceof Function)\n {\n if(callback != undefined)\n throw new SyntaxError(\"There can't be parameters after callback\");\n\n callback = transport;\n transport = undefined;\n };\n\n if(self.peerID != undefined)\n {\n params = params || {};\n\n params.from = self.peerID;\n };\n\n if(dest != undefined)\n {\n params = params || {};\n\n params.dest = dest;\n };\n\n // Encode message\n var message =\n {\n method: method,\n params: params\n };\n\n if(callback)\n {\n var id = requestID++;\n var retried = 0;\n\n message = packer.pack(message, id);\n\n function dispatchCallback(error, result)\n {\n self.cancel(message);\n\n callback(error, result);\n };\n\n var request =\n {\n message: message,\n callback: dispatchCallback,\n responseMethods: responseMethods[method] || {}\n };\n\n var encode_transport = unifyTransport(transport);\n\n function sendRequest(transport)\n {\n var rt = (method === 'ping' ? ping_request_timeout : request_timeout);\n request.timeout = setTimeout(timeout, rt*Math.pow(2, retried++));\n message2Key[message] = {id: id, dest: dest};\n requests.set(request, id, dest);\n\n transport = transport || encode_transport || self.getTransport();\n if(transport)\n return transport.send(message);\n\n return message;\n };\n\n function retry(transport)\n {\n transport = unifyTransport(transport);\n\n console.warn(retried+' retry for request message:',message);\n\n var timeout = processedResponses.pop(id, dest);\n clearTimeout(timeout);\n\n return sendRequest(transport);\n };\n\n function timeout()\n {\n if(retried < max_retries)\n return retry(transport);\n\n var error = new Error('Request has timed out');\n error.request = message;\n\n error.retry = retry;\n\n dispatchCallback(error)\n };\n\n return sendRequest(transport);\n };\n\n // Return the packed message\n message = packer.pack(message);\n\n transport = transport || this.getTransport();\n if(transport)\n return transport.send(message);\n\n return message;\n };\n\n /**\n * Decode and process a JsonRPC 2.0 message\n *\n * @param {string} message - string with the content of the message\n *\n * @returns {RpcNotification|RpcRequest|undefined} - the representation of the\n * notification or the request. If a response was processed, it will return\n * `undefined` to notify that it was processed\n *\n * @throws {TypeError} - Message is not defined\n */\n this.decode = function(message, transport)\n {\n if(!message)\n throw new TypeError(\"Message is not defined\");\n\n try\n {\n message = packer.unpack(message);\n }\n catch(e)\n {\n // Ignore invalid messages\n return console.debug(e, message);\n };\n\n var id = message.id;\n var ack = message.ack;\n var method = message.method;\n var params = message.params || {};\n\n var from = params.from;\n var dest = params.dest;\n\n // Ignore messages send by us\n if(self.peerID != undefined && from == self.peerID) return;\n\n // Notification\n if(id == undefined && ack == undefined)\n {\n var notification = new RpcNotification(method, params);\n\n if(self.emit('request', notification)) return;\n return notification;\n };\n\n\n function processRequest()\n {\n // If we have a transport and it's a duplicated request, reply inmediatly\n transport = unifyTransport(transport) || self.getTransport();\n if(transport)\n {\n var response = responses.get(id, from);\n if(response)\n return transport.send(response.message);\n };\n\n var idAck = (id != undefined) ? id : ack;\n var request = new RpcRequest(method, params, idAck, from, transport);\n\n if(self.emit('request', request)) return;\n return request;\n };\n\n function processResponse(request, error, result)\n {\n request.callback(error, result);\n };\n\n function duplicatedResponse(timeout)\n {\n console.warn(\"Response already processed\", message);\n\n // Update duplicated responses timeout\n clearTimeout(timeout);\n storeProcessedResponse(ack, from);\n };\n\n\n // Request, or response with own method\n if(method)\n {\n // Check if it's a response with own method\n if(dest == undefined || dest == self.peerID)\n {\n var request = requests.get(ack, from);\n if(request)\n {\n var responseMethods = request.responseMethods;\n\n if(method == responseMethods.error)\n return processResponse(request, params);\n\n if(method == responseMethods.response)\n return processResponse(request, null, params);\n\n return processRequest();\n }\n\n var processed = processedResponses.get(ack, from);\n if(processed)\n return duplicatedResponse(processed);\n }\n\n // Request\n return processRequest();\n };\n\n var error = message.error;\n var result = message.result;\n\n // Ignore responses not send to us\n if(error && error.dest && error.dest != self.peerID) return;\n if(result && result.dest && result.dest != self.peerID) return;\n\n // Response\n var request = requests.get(ack, from);\n if(!request)\n {\n var processed = processedResponses.get(ack, from);\n if(processed)\n return duplicatedResponse(processed);\n\n return console.warn(\"No callback was defined for this message\", message);\n };\n\n // Process response\n processResponse(request, error, result);\n };\n};\ninherits(RpcBuilder, EventEmitter);\n\n\nRpcBuilder.RpcNotification = RpcNotification;\n\n\nmodule.exports = RpcBuilder;\n\nvar clients = require('./clients');\nvar transports = require('./clients/transports');\n\nRpcBuilder.clients = clients;\nRpcBuilder.clients.transports = transports;\nRpcBuilder.packers = packers;\n\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/index.js","/*\n * options: name: XXX data: true (Maybe this is based on webrtc) audio: true,\n * video: true, url: \"file:///...\" > Player screen: true > Desktop (implicit\n * video:true, audio:false) audio: true, video: true > Webcam\n *\n * stream.hasAudio(); stream.hasVideo(); stream.hasData();\n */\nimport { Stream, StreamOptions, VideoOptions } from '../OpenViduInternal/Stream';\nimport { Session } from './Session';\n\nimport EventEmitter = require('wolfy87-eventemitter');\n\nexport class Publisher {\n\n private ee = new EventEmitter();\n\n accessAllowed = false;\n element: Element;\n id: string;\n stream: Stream;\n session: Session; //Initialized by Session.publish(Publisher)\n\n constructor(stream: Stream, parentId: string) {\n this.stream = stream;\n\n this.stream.addEventListener('camera-access-changed', (event) => {\n this.accessAllowed = event.accessAllowed;\n if (this.accessAllowed) {\n this.ee.emitEvent('accessAllowed');\n } else {\n this.ee.emitEvent('accessDenied');\n }\n });\n\n if (document.getElementById(parentId) != null) {\n this.element = document.getElementById(parentId)!!;\n }\n }\n\n publishAudio(value: boolean) {\n this.stream.getWebRtcPeer().audioEnabled = value;\n }\n\n publishVideo(value: boolean) {\n this.stream.getWebRtcPeer().videoEnabled = value;\n }\n\n destroy() {\n this.session.unpublish(this);\n this.stream.dispose();\n this.stream.removeVideo(this.element);\n return this;\n }\n\n subscribeToRemote() {\n this.stream.subscribeToMyRemote();\n }\n\n on(eventName: string, callback) {\n this.ee.addListener(eventName, event => {\n if (event) {\n console.info(\"Event '\" + eventName + \"' triggered by 'Publisher'\", event);\n } else {\n console.info(\"Event '\" + eventName + \"' triggered by 'Publisher'\");\n }\n callback(event);\n });\n if (eventName == 'videoElementCreated') {\n if (this.stream.isVideoELementCreated) {\n this.ee.emitEvent('videoElementCreated', [{\n element: this.stream.getVideoElement()\n }]);\n } else {\n this.stream.addOnceEventListener('video-element-created-by-stream', (element) => {\n this.id = element.id;\n this.ee.emitEvent('videoElementCreated', [{\n element: element.element\n }]);\n });\n }\n }\n if (eventName == 'videoPlaying') {\n var video = this.stream.getVideoElement();\n if (!this.stream.displayMyRemote() && video &&\n video.currentTime > 0 && \n video.paused == false && \n video.ended == false &&\n video.readyState == 4) {\n this.ee.emitEvent('videoPlaying', [{\n element: this.stream.getVideoElement()\n }]);\n } else {\n this.stream.addOnceEventListener('video-is-playing', (element) => {\n this.ee.emitEvent('videoPlaying', [{\n element: element.element\n }]);\n });\n }\n }\n if (eventName == 'remoteVideoPlaying') {\n var video = this.stream.getVideoElement();\n if (this.stream.displayMyRemote() && video &&\n video.currentTime > 0 && \n video.paused == false && \n video.ended == false &&\n video.readyState == 4) {\n this.ee.emitEvent('remoteVideoPlaying', [{\n element: this.stream.getVideoElement()\n }]);\n } else {\n this.stream.addOnceEventListener('remote-video-is-playing', (element) => {\n this.ee.emitEvent('remoteVideoPlaying', [{\n element: element.element\n }]);\n });\n }\n }\n if (eventName == 'streamCreated') {\n if (this.stream.isReady) {\n this.ee.emitEvent('streamCreated', [{ stream: this.stream }]);\n } else {\n this.stream.addEventListener('stream-created-by-publisher', () => {\n console.warn('Publisher emitting streamCreated');\n this.ee.emitEvent('streamCreated', [{ stream: this.stream }]);\n });\n }\n }\n if (eventName == 'accessAllowed') {\n if (this.stream.accessIsAllowed) {\n this.ee.emitEvent('accessAllowed');\n } else {\n this.stream.addEventListener('access-allowed-by-publisher', () => {\n this.ee.emitEvent('accessAllowed');\n });\n }\n }\n if (eventName == 'accessDenied') {\n if (this.stream.accessIsDenied) {\n this.ee.emitEvent('accessDenied');\n } else {\n this.stream.addEventListener('access-denied-by-publisher', () => {\n this.ee.emitEvent('accessDenied');\n });\n }\n }\n }\n}\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenVidu/Publisher.ts","import { SessionInternal, SessionOptions } from '../OpenViduInternal/SessionInternal';\nimport { Stream } from '../OpenViduInternal/Stream';\nimport { Connection } from \"../OpenViduInternal/Connection\";\n\nimport { OpenVidu } from './OpenVidu';\nimport { Publisher } from './Publisher';\nimport { Subscriber } from './Subscriber';\n\nimport EventEmitter = require('wolfy87-eventemitter');\n\nexport class Session {\n\n sessionId: String;\n //capabilities: Capabilities\n connection: Connection;\n\n private ee = new EventEmitter();\n\n constructor(private session: SessionInternal, private openVidu: OpenVidu) {\n this.sessionId = session.getSessionId();\n\n // Listens to the deactivation of the default behaviour upon the deletion of a Stream object\n this.session.addEventListener('stream-destroyed-default', event => {\n event.stream.removeVideo();\n });\n\n // Listens to the deactivation of the default behaviour upon the disconnection of a Session\n this.session.addEventListener('session-disconnected-default', () => {\n let s: Stream;\n for (s of this.openVidu.openVidu.getRemoteStreams()) {\n s.removeVideo();\n }\n if (this.connection) {\n for (let streamId in this.connection.getStreams()) {\n this.connection.getStreams()[streamId].removeVideo();\n }\n }\n });\n\n // Sets or updates the value of 'connection' property. Triggered by SessionInternal when succesful connection\n this.session.addEventListener('update-connection-object', event => {\n this.connection = event.connection;\n });\n }\n\n connect(token: string, callback: any);\n connect(token: string, metadata: any, callback: any);\n\n connect(param1, param2, param3?) {\n // Early configuration to deactivate automatic subscription to streams\n if (param3) {\n this.session.configure({\n sessionId: this.session.getSessionId(),\n participantId: param1,\n metadata: this.session.stringClientMetadata(param2),\n subscribeToStreams: false\n });\n this.session.connect(param1, param3);\n } else {\n this.session.configure({\n sessionId: this.session.getSessionId(),\n participantId: param1,\n metadata: '',\n subscribeToStreams: false\n });\n this.session.connect(param1, param2);\n }\n }\n\n disconnect() {\n this.openVidu.openVidu.close(false);\n this.session.emitEvent('sessionDisconnected', [{\n preventDefault: () => { this.session.removeEvent('session-disconnected-default'); }\n }]);\n this.session.emitEvent('session-disconnected-default', [{}]);\n }\n\n publish(publisher: Publisher) {\n publisher.session = this;\n publisher.stream.publish();\n }\n\n unpublish(publisher: Publisher) {\n this.session.unpublish(publisher.stream);\n }\n\n on(eventName: string, callback) {\n this.session.addEventListener(eventName, event => {\n if (event) {\n console.info(\"Event '\" + eventName + \"' triggered by 'Session'\", event);\n } else {\n console.info(\"Event '\" + eventName + \"' triggered by 'Session'\");\n }\n callback(event);\n });\n }\n\n once(eventName: string, callback) {\n this.session.addOnceEventListener(eventName, event => {\n callback(event);\n });\n }\n\n off(eventName: string, eventHandler) {\n this.session.removeListener(eventName, eventHandler);\n }\n\n subscribe(stream: Stream, htmlId: string, videoOptions: any): Subscriber;\n subscribe(stream: Stream, htmlId: string): Subscriber;\n\n subscribe(param1, param2, param3?): Subscriber {\n // Subscription\n this.session.subscribe(param1);\n let subscriber = new Subscriber(param1, param2);\n param1.playOnlyVideo(param2, null);\n return subscriber;\n }\n\n unsubscribe(subscriber: Subscriber) {\n this.session.unsuscribe(subscriber.stream);\n subscriber.stream.removeVideo();\n }\n\n\n\n\n /* Shortcut event API */\n\n onStreamCreated(callback) {\n this.session.addEventListener(\"streamCreated\", streamEvent => {\n callback(streamEvent.stream);\n });\n }\n\n onStreamDestroyed(callback) {\n this.session.addEventListener(\"streamDestroyed\", streamEvent => {\n callback(streamEvent.stream);\n });\n }\n\n onParticipantJoined(callback) {\n this.session.addEventListener(\"participant-joined\", participantEvent => {\n callback(participantEvent.connection);\n });\n }\n\n onParticipantLeft(callback) {\n this.session.addEventListener(\"participant-left\", participantEvent => {\n callback(participantEvent.connection);\n });\n }\n\n onParticipantPublished(callback) {\n this.session.addEventListener(\"participant-published\", participantEvent => {\n callback(participantEvent.connection);\n });\n }\n\n onParticipantEvicted(callback) {\n this.session.addEventListener(\"participant-evicted\", participantEvent => {\n callback(participantEvent.connection);\n });\n }\n\n onRoomClosed(callback) {\n this.session.addEventListener(\"room-closed\", roomEvent => {\n callback(roomEvent.room);\n });\n }\n\n onLostConnection(callback) {\n this.session.addEventListener(\"lost-connection\", roomEvent => {\n callback(roomEvent.room);\n });\n }\n\n onMediaError(callback) {\n this.session.addEventListener(\"error-media\", errorEvent => {\n callback(errorEvent.error)\n });\n }\n\n /* Shortcut event API */\n}\n\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenVidu/Session.ts","import { Stream, StreamOptions, VideoOptions } from '../OpenViduInternal/Stream';\n\nimport EventEmitter = require('wolfy87-eventemitter');\n\nexport class Subscriber {\n\n private ee = new EventEmitter();\n\n element: Element;\n id: string;\n stream: Stream;\n\n constructor(stream: Stream, parentId: string) {\n this.stream = stream;\n if (document.getElementById(parentId) != null) {\n this.element = document.getElementById(parentId)!!;\n }\n }\n\n on(eventName: string, callback) {\n this.ee.addListener(eventName, event => {\n if (event) {\n console.info(\"Event '\" + eventName + \"' triggered by 'Subscriber'\", event);\n } else {\n console.info(\"Event '\" + eventName + \"' triggered by 'Subscriber'\");\n }\n callback(event);\n });\n if (eventName == 'videoElementCreated') {\n if (this.stream.isReady) {\n this.ee.emitEvent('videoElementCreated', [{\n element: this.stream.getVideoElement()\n }]);\n } else {\n this.stream.addOnceEventListener('video-element-created-by-stream', element => {\n console.warn(\"Subscriber emitting videoElementCreated\");\n this.id = element.id;\n this.ee.emitEvent('videoElementCreated', [{\n element: element\n }]);\n });\n }\n }\n if (eventName == 'videoPlaying') {\n var video = this.stream.getVideoElement();\n if (!this.stream.displayMyRemote() && video &&\n video.currentTime > 0 && \n video.paused == false && \n video.ended == false &&\n video.readyState == 4) {\n this.ee.emitEvent('videoPlaying', [{\n element: this.stream.getVideoElement()\n }]);\n } else {\n this.stream.addOnceEventListener('video-is-playing', (element) => {\n this.ee.emitEvent('videoPlaying', [{\n element: element.element\n }]);\n });\n }\n }\n }\n}\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenVidu/Subscriber.ts","import { Stream, StreamOptions } from './Stream';\nimport { OpenViduInternal } from './OpenViduInternal';\nimport { SessionInternal } from './SessionInternal';\n\ntype ObjMap = { [s: string]: T; }\n\nexport interface ConnectionOptions {\n id: string;\n metadata: string;\n streams?: StreamOptions[];\n audioOnly: boolean;\n}\n\nexport class Connection {\n\n public connectionId: string;\n public data: string;\n public creationTime: number;\n private streams: ObjMap = {};\n private streamsOpts: StreamOptions[] = [];\n\n constructor( private openVidu: OpenViduInternal, private local: boolean, private room: SessionInternal, private options?: ConnectionOptions ) {\n\n console.info( \"'Connection' created (\" + ( local ? \"local\" : \"remote\" ) + \")\" + ( local ? \"\" : \", with 'connectionId' [\" + (options ? options.id : '') + \"] \" ));\n\n if ( options ) {\n\n this.connectionId = options.id;\n this.data = options.metadata;\n\n if ( options.streams ) {\n this.initStreams(options);\n }\n }\n \n }\n\n addStream( stream: Stream ) {\n this.streams[stream.getIdInParticipant()] = stream;\n this.room.getStreams()[stream.getIdInParticipant()] = stream;\n }\n\n getStreams() {\n return this.streams;\n }\n\n dispose() {\n for ( let key in this.streams ) {\n this.streams[key].dispose();\n }\n }\n\n sendIceCandidate( candidate ) {\n\n console.debug(( this.local ? \"Local\" : \"Remote\" ), \"candidate for\",\n this.connectionId, JSON.stringify( candidate ) );\n\n this.openVidu.sendRequest( \"onIceCandidate\", {\n endpointName: this.connectionId,\n candidate: candidate.candidate,\n sdpMid: candidate.sdpMid,\n sdpMLineIndex: candidate.sdpMLineIndex\n }, function( error, response ) {\n if ( error ) {\n console.error( \"Error sending ICE candidate: \"\n + JSON.stringify( error ) );\n }\n });\n }\n\n initStreams(options) {\n for ( let streamOptions of options.streams ) {\n \n let streamOpts = {\n id: streamOptions.id,\n connection: this,\n recvVideo: ( streamOptions.recvVideo == undefined ? true : streamOptions.recvVideo ),\n recvAudio: ( streamOptions.recvAudio == undefined ? true : streamOptions.recvAudio ),\n audio: streamOptions.audio,\n video: streamOptions.video,\n data: streamOptions.data,\n mediaConstraints: streamOptions.mediaConstraints,\n audioOnly: streamOptions.audioOnly,\n }\n let stream = new Stream(this.openVidu, false, this.room, streamOpts );\n\n this.addStream( stream );\n this.streamsOpts.push( streamOpts );\n }\n\n console.info(\"Remote 'Connection' with 'connectionId' [\" + this.connectionId + \"] is now configured for receiving Streams with options: \", this.streamsOpts );\n }\n}\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenViduInternal/Connection.ts","function webpackEmptyContext(req) {\n\tthrow new Error(\"Cannot find module '\" + req + \"'.\");\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 143;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src async\n// module id = 143\n// module chunks = 1","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule);\n\n\n\n// WEBPACK FOOTER //\n// ./src/main.ts","import { Component, OnInit, OnDestroy, HostListener } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { InfoService } from 'app/services/info.service';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.css']\n})\nexport class AppComponent implements OnInit, OnDestroy {\n\n websocket: WebSocket;\n\n constructor(private infoService: InfoService) { }\n\n ngOnInit() {\n\n const protocol = location.protocol.includes('https') ? 'wss://' : 'ws://';\n const port = (location.port) ? (':' + location.port) : '';\n\n this.websocket = new WebSocket(protocol + location.hostname + port + '/info');\n\n this.websocket.onopen = (event) => {\n console.log('Info websocket connected');\n };\n this.websocket.onclose = (event) => {\n console.log('Info websocket closed');\n };\n this.websocket.onerror = (event) => {\n console.log('Info websocket error');\n };\n this.websocket.onmessage = (event) => {\n console.log('Info websocket message');\n console.log(event.data);\n this.infoService.updateInfo(event.data);\n\n };\n }\n\n ngOnDestroy() {\n this.websocket.close();\n }\n\n @HostListener('window:beforeunload', ['$event'])\n beforeUnloadHander(event) {\n console.warn('Closing info websocket');\n this.websocket.close();\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/app.component.ts","import { NgModule } from '@angular/core';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport {\n MdButtonModule,\n MdIconModule,\n MdCheckboxModule,\n MdCardModule,\n MdInputModule,\n MdProgressSpinnerModule,\n MdTooltipModule,\n MdDialogModule,\n MdSlideToggleModule\n} from '@angular/material';\n\n@NgModule({\n imports: [\n BrowserAnimationsModule,\n MdButtonModule,\n MdIconModule,\n MdCheckboxModule,\n MdCardModule,\n MdInputModule,\n MdProgressSpinnerModule,\n MdTooltipModule,\n MdDialogModule,\n MdSlideToggleModule\n ],\n exports: [\n BrowserAnimationsModule,\n MdButtonModule,\n MdIconModule,\n MdCheckboxModule,\n MdCardModule,\n MdInputModule,\n MdProgressSpinnerModule,\n MdTooltipModule,\n MdDialogModule,\n MdSlideToggleModule\n ],\n})\nexport class AppMaterialModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/app.material.module.ts","import { BrowserModule } from '@angular/platform-browser';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule } from '@angular/router';\nimport 'hammerjs';\n\nimport { routing } from './app.routing';\nimport { AppMaterialModule } from 'app/app.material.module';\n\nimport { InfoService } from './services/info.service';\n\nimport { AppComponent } from './app.component';\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\nimport { SessionDetailsComponent } from './components/session-details/session-details.component';\nimport { CredentialsDialogComponent } from './components/dashboard/credentials-dialog.component';\n\n\n@NgModule({\n declarations: [\n AppComponent,\n DashboardComponent,\n SessionDetailsComponent,\n CredentialsDialogComponent,\n ],\n imports: [\n BrowserModule,\n FormsModule,\n HttpModule,\n routing,\n AppMaterialModule,\n FlexLayoutModule\n ],\n entryComponents: [\n CredentialsDialogComponent,\n ],\n providers: [InfoService],\n bootstrap: [AppComponent]\n})\nexport class AppModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/app.module.ts","import { ModuleWithProviders } from '@angular/core';\nimport { Routes, RouterModule } from '@angular/router';\n\nimport { DashboardComponent } from 'app/components/dashboard/dashboard.component';\nimport { SessionDetailsComponent } from 'app/components/session-details/session-details.component';\n\nconst appRoutes: Routes = [\n {\n path: '',\n component: DashboardComponent\n },\n {\n path: 'session/:id',\n component: SessionDetailsComponent\n }\n];\n\nexport const routing: ModuleWithProviders = RouterModule.forRoot(appRoutes);\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/app.routing.ts","// The file contents for the current environment will overwrite these during build.\n// The build system defaults to the dev environment which uses `environment.ts`, but if you do\n// `ng build --env=prod` then `environment.prod.ts` will be used instead.\n// The list of which env maps to which file can be found in `.angular-cli.json`.\n\nexport const environment = {\n production: false\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/environments/environment.ts","exports = module.exports = require(\"../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \"\", \"\"]);\n\n// exports\n\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = module.exports.toString();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/app.component.css\n// module id = 226\n// module chunks = 1","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \"#dashboard-div {\\n padding: 20px;\\n}\\n\\n#log {\\n height: 90%;\\n}\\n\\n#log-content {\\n height: 90%;\\n font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;\\n overflow-y: auto;\\n overflow-x: hidden\\n}\\n\\nul {\\n margin: 0;\\n}\\n\\nbutton.mat-raised-button {\\n text-transform: uppercase;\\n float: right;\\n}\\n\\nmd-card-title button.blue {\\n color: #ffffff;\\n background-color: #0088aa;\\n}\\n\\nmd-card-title button.yellow {\\n color: rgba(0, 0, 0, 0.87);\\n background-color: #ffcc00;\\n}\\n\\nmd-spinner {\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n -webkit-transform: translate(-50%, -50%);\\n transform: translate(-50%, -50%);\\n}\\n\\n#tick-div {\\n width: 100px;\\n height: 100px;\\n z-index: 1;\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n -webkit-transform: translate(-50%, -50%);\\n transform: translate(-50%, -50%);\\n}\\n\\n#tooltip-tick {\\n position: absolute;\\n width: 100%;\\n height: 100%;\\n z-index: 2;\\n}\\n\\n.circ {\\n opacity: 0;\\n stroke-dasharray: 130;\\n stroke-dashoffset: 130;\\n transition: all 1s;\\n}\\n\\n.tick {\\n stroke-dasharray: 50;\\n stroke-dashoffset: 50;\\n transition: stroke-dashoffset 1s 0.5s ease-out;\\n}\\n\\n.drawn+svg .path {\\n opacity: 1;\\n stroke-dashoffset: 0;\\n}\\n\\n#mirrored-video {\\n position: relative;\\n}\\n\\n\\n/* Pure CSS loader */\\n\\n#loader {\\n width: 100px;\\n height: 100px;\\n z-index: 1;\\n position: absolute;\\n top: 50%;\\n left: 50%;\\n -webkit-transform: translate(-50%, -50%);\\n transform: translate(-50%, -50%);\\n}\\n\\n#loader * {\\n box-sizing: border-box;\\n}\\n\\n#loader ::after {\\n box-sizing: border-box;\\n}\\n\\n#loader ::before {\\n box-sizing: border-box;\\n}\\n\\n.loader-1 {\\n height: 100px;\\n width: 100px;\\n -webkit-animation: loader-1-1 4.8s linear infinite;\\n animation: loader-1-1 4.8s linear infinite;\\n}\\n\\n@-webkit-keyframes loader-1-1 {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n }\\n 100% {\\n -webkit-transform: rotate(360deg);\\n }\\n}\\n\\n@keyframes loader-1-1 {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg);\\n }\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n\\n.loader-1 span {\\n display: block;\\n position: absolute;\\n top: 0;\\n left: 0;\\n bottom: 0;\\n right: 0;\\n margin: auto;\\n height: 100px;\\n width: 100px;\\n clip: rect(0, 100px, 100px, 50px);\\n -webkit-animation: loader-1-2 1.2s linear infinite;\\n animation: loader-1-2 1.2s linear infinite;\\n}\\n\\n@-webkit-keyframes loader-1-2 {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n }\\n 100% {\\n -webkit-transform: rotate(220deg);\\n }\\n}\\n\\n@keyframes loader-1-2 {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg);\\n }\\n 100% {\\n -webkit-transform: rotate(220deg);\\n transform: rotate(220deg);\\n }\\n}\\n\\n.loader-1 span::after {\\n content: \\\"\\\";\\n position: absolute;\\n top: 0;\\n left: 0;\\n bottom: 0;\\n right: 0;\\n margin: auto;\\n height: 100px;\\n width: 100px;\\n clip: rect(0, 100px, 100px, 50px);\\n border: 8px solid #4d4d4d;\\n border-radius: 50%;\\n -webkit-animation: loader-1-3 1.2s cubic-bezier(0.770, 0.000, 0.175, 1.000) infinite;\\n animation: loader-1-3 1.2s cubic-bezier(0.770, 0.000, 0.175, 1.000) infinite;\\n}\\n\\n@-webkit-keyframes loader-1-3 {\\n 0% {\\n -webkit-transform: rotate(-140deg);\\n }\\n 50% {\\n -webkit-transform: rotate(-160deg);\\n }\\n 100% {\\n -webkit-transform: rotate(140deg);\\n }\\n}\\n\\n@keyframes loader-1-3 {\\n 0% {\\n -webkit-transform: rotate(-140deg);\\n transform: rotate(-140deg);\\n }\\n 50% {\\n -webkit-transform: rotate(-160deg);\\n transform: rotate(-160deg);\\n }\\n 100% {\\n -webkit-transform: rotate(140deg);\\n transform: rotate(140deg);\\n }\\n}\", \"\"]);\n\n// exports\n\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = module.exports.toString();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/components/dashboard/dashboard.component.css\n// module id = 227\n// module chunks = 1","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \"\", \"\"]);\n\n// exports\n\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = module.exports.toString();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/components/session-details/session-details.component.css\n// module id = 228\n// module chunks = 1","module.exports = \"
\\n \\n
\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/app.component.html\n// module id = 237\n// module chunks = 1","module.exports = \"
\\n\\n
\\n \\n Server events\\n \\n lock_outline\\n \\n \\n \\n \\n
    \\n
  • \\n

    {{i}}

    \\n
  • \\n
\\n
\\n
\\n
\\n\\n
\\n \\n Test the connection\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\n \\n \\n
\\n
\\n

{{msg}}

\\n
\\n
\\n
\\n\\n
\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/components/dashboard/dashboard.component.html\n// module id = 238\n// module chunks = 1","module.exports = \"

\\n session-details works!\\n

\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/app/components/session-details/session-details.component.html\n// module id = 239\n// module chunks = 1","function Mapper()\n{\n var sources = {};\n\n\n this.forEach = function(callback)\n {\n for(var key in sources)\n {\n var source = sources[key];\n\n for(var key2 in source)\n callback(source[key2]);\n };\n };\n\n this.get = function(id, source)\n {\n var ids = sources[source];\n if(ids == undefined)\n return undefined;\n\n return ids[id];\n };\n\n this.remove = function(id, source)\n {\n var ids = sources[source];\n if(ids == undefined)\n return;\n\n delete ids[id];\n\n // Check it's empty\n for(var i in ids){return false}\n\n delete sources[source];\n };\n\n this.set = function(value, id, source)\n {\n if(value == undefined)\n return this.remove(id, source);\n\n var ids = sources[source];\n if(ids == undefined)\n sources[source] = ids = {};\n\n ids[id] = value;\n };\n};\n\n\nMapper.prototype.pop = function(id, source)\n{\n var value = this.get(id, source);\n if(value == undefined)\n return undefined;\n\n this.remove(id, source);\n\n return value;\n};\n\n\nmodule.exports = Mapper;\n\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/Mapper.js","/*\n * (C) Copyright 2014 Kurento (http://kurento.org/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nvar JsonRpcClient = require('./jsonrpcclient');\n\n\nexports.JsonRpcClient = JsonRpcClient;\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/clients/index.js","/*\n * (C) Copyright 2014 Kurento (http://kurento.org/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nvar RpcBuilder = require('../');\nvar WebSocketWithReconnection = require('./transports/webSocketWithReconnection');\n\nDate.now = Date.now || function() {\n return +new Date;\n};\n\nvar PING_INTERVAL = 5000;\n\nvar RECONNECTING = 'RECONNECTING';\nvar CONNECTED = 'CONNECTED';\nvar DISCONNECTED = 'DISCONNECTED';\n\nvar Logger = console;\n\n/**\n *\n * heartbeat: interval in ms for each heartbeat message,\n * sendCloseMessage : true / false, before closing the connection, it sends a closeSession message\n *
\n * ws : {\n * \turi : URI to conntect to,\n *  useSockJS : true (use SockJS) / false (use WebSocket) by default,\n * \tonconnected : callback method to invoke when connection is successful,\n * \tondisconnect : callback method to invoke when the connection is lost,\n * \tonreconnecting : callback method to invoke when the client is reconnecting,\n * \tonreconnected : callback method to invoke when the client succesfully reconnects,\n * \tonerror : callback method to invoke when there is an error\n * },\n * rpc : {\n * \trequestTimeout : timeout for a request,\n * \tsessionStatusChanged: callback method for changes in session status,\n * \tmediaRenegotiation: mediaRenegotiation\n * }\n * 
\n */\nfunction JsonRpcClient(configuration) {\n\n var self = this;\n\n var wsConfig = configuration.ws;\n\n var notReconnectIfNumLessThan = -1;\n\n var pingNextNum = 0;\n var enabledPings = true;\n var pingPongStarted = false;\n var pingInterval;\n\n var status = DISCONNECTED;\n\n var onreconnecting = wsConfig.onreconnecting;\n var onreconnected = wsConfig.onreconnected;\n var onconnected = wsConfig.onconnected;\n var onerror = wsConfig.onerror;\n\n configuration.rpc.pull = function(params, request) {\n request.reply(null, \"push\");\n }\n\n wsConfig.onreconnecting = function() {\n Logger.debug(\"--------- ONRECONNECTING -----------\");\n if (status === RECONNECTING) {\n Logger.error(\"Websocket already in RECONNECTING state when receiving a new ONRECONNECTING message. Ignoring it\");\n return;\n }\n\n status = RECONNECTING;\n if (onreconnecting) {\n onreconnecting();\n }\n }\n\n wsConfig.onreconnected = function() {\n Logger.debug(\"--------- ONRECONNECTED -----------\");\n if (status === CONNECTED) {\n Logger.error(\"Websocket already in CONNECTED state when receiving a new ONRECONNECTED message. Ignoring it\");\n return;\n }\n status = CONNECTED;\n\n enabledPings = true;\n updateNotReconnectIfLessThan();\n usePing();\n\n if (onreconnected) {\n onreconnected();\n }\n }\n\n wsConfig.onconnected = function() {\n Logger.debug(\"--------- ONCONNECTED -----------\");\n if (status === CONNECTED) {\n Logger.error(\"Websocket already in CONNECTED state when receiving a new ONCONNECTED message. Ignoring it\");\n return;\n }\n status = CONNECTED;\n\n enabledPings = true;\n usePing();\n\n if (onconnected) {\n onconnected();\n }\n }\n\n wsConfig.onerror = function(error) {\n Logger.debug(\"--------- ONERROR -----------\");\n\n status = DISCONNECTED;\n\n if (onerror) {\n onerror(error);\n }\n }\n\n var ws = new WebSocketWithReconnection(wsConfig);\n\n Logger.debug('Connecting websocket to URI: ' + wsConfig.uri);\n\n var rpcBuilderOptions = {\n request_timeout: configuration.rpc.requestTimeout,\n ping_request_timeout: configuration.rpc.heartbeatRequestTimeout\n };\n\n var rpc = new RpcBuilder(RpcBuilder.packers.JsonRPC, rpcBuilderOptions, ws,\n function(request) {\n\n Logger.debug('Received request: ' + JSON.stringify(request));\n\n try {\n var func = configuration.rpc[request.method];\n\n if (func === undefined) {\n Logger.error(\"Method \" + request.method + \" not registered in client\");\n } else {\n func(request.params, request);\n }\n } catch (err) {\n Logger.error('Exception processing request: ' + JSON.stringify(request));\n Logger.error(err);\n }\n });\n\n this.send = function(method, params, callback) {\n if (method !== 'ping') {\n Logger.debug('Request: method:' + method + \" params:\" + JSON.stringify(params));\n }\n\n var requestTime = Date.now();\n\n rpc.encode(method, params, function(error, result) {\n if (error) {\n try {\n Logger.error(\"ERROR:\" + error.message + \" in Request: method:\" +\n method + \" params:\" + JSON.stringify(params) + \" request:\" +\n error.request);\n if (error.data) {\n Logger.error(\"ERROR DATA:\" + JSON.stringify(error.data));\n }\n } catch (e) {}\n error.requestTime = requestTime;\n }\n if (callback) {\n if (result != undefined && result.value !== 'pong') {\n Logger.debug('Response: ' + JSON.stringify(result));\n }\n callback(error, result);\n }\n });\n }\n\n function updateNotReconnectIfLessThan() {\n Logger.debug(\"notReconnectIfNumLessThan = \" + pingNextNum + ' (old=' +\n notReconnectIfNumLessThan + ')');\n notReconnectIfNumLessThan = pingNextNum;\n }\n\n function sendPing() {\n if (enabledPings) {\n var params = null;\n if (pingNextNum == 0 || pingNextNum == notReconnectIfNumLessThan) {\n params = {\n interval: configuration.heartbeat || PING_INTERVAL\n };\n }\n pingNextNum++;\n\n self.send('ping', params, (function(pingNum) {\n return function(error, result) {\n if (error) {\n Logger.debug(\"Error in ping request #\" + pingNum + \" (\" +\n error.message + \")\");\n if (pingNum > notReconnectIfNumLessThan) {\n enabledPings = false;\n updateNotReconnectIfLessThan();\n Logger.debug(\"Server did not respond to ping message #\" +\n pingNum + \". Reconnecting... \");\n ws.reconnectWs();\n }\n }\n }\n })(pingNextNum));\n } else {\n Logger.debug(\"Trying to send ping, but ping is not enabled\");\n }\n }\n\n /*\n * If configuration.hearbeat has any value, the ping-pong will work with the interval\n * of configuration.hearbeat\n */\n function usePing() {\n if (!pingPongStarted) {\n Logger.debug(\"Starting ping (if configured)\")\n pingPongStarted = true;\n\n if (configuration.heartbeat != undefined) {\n pingInterval = setInterval(sendPing, configuration.heartbeat);\n sendPing();\n }\n }\n }\n\n this.close = function() {\n Logger.debug(\"Closing jsonRpcClient explicitly by client\");\n\n if (pingInterval != undefined) {\n Logger.debug(\"Clearing ping interval\");\n clearInterval(pingInterval);\n }\n pingPongStarted = false;\n enabledPings = false;\n\n if (configuration.sendCloseMessage) {\n Logger.debug(\"Sending close message\")\n this.send('closeSession', null, function(error, result) {\n if (error) {\n Logger.error(\"Error sending close message: \" + JSON.stringify(error));\n }\n ws.close();\n });\n } else {\n\t\t\tws.close();\n }\n }\n\n // This method is only for testing\n this.forceClose = function(millis) {\n ws.forceClose(millis);\n }\n\n this.reconnect = function() {\n ws.reconnectWs();\n }\n}\n\n\nmodule.exports = JsonRpcClient;\n\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/clients/jsonrpcclient.js","/*\n * (C) Copyright 2014 Kurento (http://kurento.org/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\nvar WebSocketWithReconnection = require('./webSocketWithReconnection');\n\n\nexports.WebSocketWithReconnection = WebSocketWithReconnection;\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/clients/transports/index.js","/**\n * JsonRPC 2.0 packer\n */\n\n/**\n * Pack a JsonRPC 2.0 message\n *\n * @param {Object} message - object to be packaged. It requires to have all the\n * fields needed by the JsonRPC 2.0 message that it's going to be generated\n *\n * @return {String} - the stringified JsonRPC 2.0 message\n */\nfunction pack(message, id)\n{\n var result =\n {\n jsonrpc: \"2.0\"\n };\n\n // Request\n if(message.method)\n {\n result.method = message.method;\n\n if(message.params)\n result.params = message.params;\n\n // Request is a notification\n if(id != undefined)\n result.id = id;\n }\n\n // Response\n else if(id != undefined)\n {\n if(message.error)\n {\n if(message.result !== undefined)\n throw new TypeError(\"Both result and error are defined\");\n\n result.error = message.error;\n }\n else if(message.result !== undefined)\n result.result = message.result;\n else\n throw new TypeError(\"No result or error is defined\");\n\n result.id = id;\n };\n\n return JSON.stringify(result);\n};\n\n/**\n * Unpack a JsonRPC 2.0 message\n *\n * @param {String} message - string with the content of the JsonRPC 2.0 message\n *\n * @throws {TypeError} - Invalid JsonRPC version\n *\n * @return {Object} - object filled with the JsonRPC 2.0 message content\n */\nfunction unpack(message)\n{\n var result = message;\n\n if(typeof message === 'string' || message instanceof String) {\n result = JSON.parse(message);\n }\n\n // Check if it's a valid message\n\n var version = result.jsonrpc;\n if(version !== '2.0')\n throw new TypeError(\"Invalid JsonRPC version '\" + version + \"': \" + message);\n\n // Response\n if(result.method == undefined)\n {\n if(result.id == undefined)\n throw new TypeError(\"Invalid message: \"+message);\n\n var result_defined = result.result !== undefined;\n var error_defined = result.error !== undefined;\n\n // Check only result or error is defined, not both or none\n if(result_defined && error_defined)\n throw new TypeError(\"Both result and error are defined: \"+message);\n\n if(!result_defined && !error_defined)\n throw new TypeError(\"No result or error is defined: \"+message);\n\n result.ack = result.id;\n delete result.id;\n }\n\n // Return unpacked message\n return result;\n};\n\n\nexports.pack = pack;\nexports.unpack = unpack;\n\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/packers/JsonRPC.js","function pack(message)\n{\n throw new TypeError(\"Not yet implemented\");\n};\n\nfunction unpack(message)\n{\n throw new TypeError(\"Not yet implemented\");\n};\n\n\nexports.pack = pack;\nexports.unpack = unpack;\n\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/packers/XmlRPC.js","var JsonRPC = require('./JsonRPC');\nvar XmlRPC = require('./XmlRPC');\n\n\nexports.JsonRPC = JsonRPC;\nexports.XmlRPC = XmlRPC;\n\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-jsonrpc/packers/index.js","/*\n * (C) Copyright 2014-2015 Kurento (http://kurento.org/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar freeice = require('freeice')\nvar inherits = require('inherits')\nvar UAParser = require('ua-parser-js')\nvar uuid = require('uuid')\nvar hark = require('hark')\n\nvar EventEmitter = require('events').EventEmitter\nvar recursive = require('merge').recursive.bind(undefined, true)\nvar sdpTranslator = require('sdp-translator')\nvar logger = window.Logger || console\n\n// var gUM = navigator.mediaDevices.getUserMedia || function (constraints) {\n// return new Promise(navigator.getUserMedia(constraints, function (stream) {\n// videoStream = stream\n// start()\n// }).eror(callback));\n// }\n\ntry {\n require('kurento-browser-extensions')\n} catch (error) {\n if (typeof getScreenConstraints === 'undefined') {\n logger.warn('screen sharing is not available')\n\n getScreenConstraints = function getScreenConstraints(sendSource, callback) {\n callback(new Error(\"This library is not enabled for screen sharing\"))\n }\n }\n}\n\nvar MEDIA_CONSTRAINTS = {\n audio: true,\n video: {\n width: 640,\n framerate: 15\n }\n}\n\n// Somehow, the UAParser constructor gets an empty window object.\n// We need to pass the user agent string in order to get information\nvar ua = (window && window.navigator) ? window.navigator.userAgent : ''\nvar parser = new UAParser(ua)\nvar browser = parser.getBrowser()\n\nvar usePlanB = false\nif (browser.name === 'Chrome' || browser.name === 'Chromium') {\n logger.debug(browser.name + \": using SDP PlanB\")\n usePlanB = true\n}\n\nfunction noop(error) {\n if (error) logger.error(error)\n}\n\nfunction trackStop(track) {\n track.stop && track.stop()\n}\n\nfunction streamStop(stream) {\n stream.getTracks().forEach(trackStop)\n}\n\n/**\n * Returns a string representation of a SessionDescription object.\n */\nvar dumpSDP = function (description) {\n if (typeof description === 'undefined' || description === null) {\n return ''\n }\n\n return 'type: ' + description.type + '\\r\\n' + description.sdp\n}\n\nfunction bufferizeCandidates(pc, onerror) {\n var candidatesQueue = []\n\n pc.addEventListener('signalingstatechange', function () {\n if (this.signalingState === 'stable') {\n while (candidatesQueue.length) {\n var entry = candidatesQueue.shift()\n\n this.addIceCandidate(entry.candidate, entry.callback, entry.callback)\n }\n }\n })\n\n return function (candidate, callback) {\n callback = callback || onerror\n\n switch (pc.signalingState) {\n case 'closed':\n callback(new Error('PeerConnection object is closed'))\n break\n case 'stable':\n if (pc.remoteDescription) {\n pc.addIceCandidate(candidate, callback, callback)\n break\n }\n default:\n candidatesQueue.push({\n candidate: candidate,\n callback: callback\n })\n }\n }\n}\n\n/* Simulcast utilities */\n\nfunction removeFIDFromOffer(sdp) {\n var n = sdp.indexOf(\"a=ssrc-group:FID\");\n\n if (n > 0) {\n return sdp.slice(0, n);\n } else {\n return sdp;\n }\n}\n\nfunction getSimulcastInfo(videoStream) {\n var videoTracks = videoStream.getVideoTracks();\n if (!videoTracks.length) {\n logger.warn('No video tracks available in the video stream')\n return ''\n }\n var lines = [\n 'a=x-google-flag:conference',\n 'a=ssrc-group:SIM 1 2 3',\n 'a=ssrc:1 cname:localVideo',\n 'a=ssrc:1 msid:' + videoStream.id + ' ' + videoTracks[0].id,\n 'a=ssrc:1 mslabel:' + videoStream.id,\n 'a=ssrc:1 label:' + videoTracks[0].id,\n 'a=ssrc:2 cname:localVideo',\n 'a=ssrc:2 msid:' + videoStream.id + ' ' + videoTracks[0].id,\n 'a=ssrc:2 mslabel:' + videoStream.id,\n 'a=ssrc:2 label:' + videoTracks[0].id,\n 'a=ssrc:3 cname:localVideo',\n 'a=ssrc:3 msid:' + videoStream.id + ' ' + videoTracks[0].id,\n 'a=ssrc:3 mslabel:' + videoStream.id,\n 'a=ssrc:3 label:' + videoTracks[0].id\n ];\n\n lines.push('');\n\n return lines.join('\\n');\n}\n\n/**\n * Wrapper object of an RTCPeerConnection. This object is aimed to simplify the\n * development of WebRTC-based applications.\n *\n * @constructor module:kurentoUtils.WebRtcPeer\n *\n * @param {String} mode Mode in which the PeerConnection will be configured.\n * Valid values are: 'recv', 'send', and 'sendRecv'\n * @param localVideo Video tag for the local stream\n * @param remoteVideo Video tag for the remote stream\n * @param {MediaStream} videoStream Stream to be used as primary source\n * (typically video and audio, or only video if combined with audioStream) for\n * localVideo and to be added as stream to the RTCPeerConnection\n * @param {MediaStream} audioStream Stream to be used as second source\n * (typically for audio) for localVideo and to be added as stream to the\n * RTCPeerConnection\n */\nfunction WebRtcPeer(mode, options, callback) {\n if (!(this instanceof WebRtcPeer)) {\n return new WebRtcPeer(mode, options, callback)\n }\n\n WebRtcPeer.super_.call(this)\n\n if (options instanceof Function) {\n callback = options\n options = undefined\n }\n\n options = options || {}\n callback = (callback || noop).bind(this)\n\n var self = this\n var localVideo = options.localVideo\n var remoteVideo = options.remoteVideo\n var videoStream = options.videoStream\n var audioStream = options.audioStream\n var mediaConstraints = options.mediaConstraints\n\n var connectionConstraints = options.connectionConstraints\n var pc = options.peerConnection\n var sendSource = options.sendSource || 'webcam'\n\n var dataChannelConfig = options.dataChannelConfig\n var useDataChannels = options.dataChannels || false\n var dataChannel\n\n var guid = uuid.v4()\n var configuration = recursive({\n iceServers: freeice()\n },\n options.configuration)\n\n var onicecandidate = options.onicecandidate\n if (onicecandidate) this.on('icecandidate', onicecandidate)\n\n var oncandidategatheringdone = options.oncandidategatheringdone\n if (oncandidategatheringdone) {\n this.on('candidategatheringdone', oncandidategatheringdone)\n }\n\n var simulcast = options.simulcast\n var multistream = options.multistream\n var interop = new sdpTranslator.Interop()\n var candidatesQueueOut = []\n var candidategatheringdone = false\n\n Object.defineProperties(this, {\n 'peerConnection': {\n get: function () {\n return pc\n }\n },\n\n 'id': {\n value: options.id || guid,\n writable: false\n },\n\n 'remoteVideo': {\n get: function () {\n return remoteVideo\n }\n },\n\n 'localVideo': {\n get: function () {\n return localVideo\n }\n },\n\n 'dataChannel': {\n get: function () {\n return dataChannel\n }\n },\n\n /**\n * @member {(external:ImageData|undefined)} currentFrame\n */\n 'currentFrame': {\n get: function () {\n // [ToDo] Find solution when we have a remote stream but we didn't set\n // a remoteVideo tag\n if (!remoteVideo) return;\n\n if (remoteVideo.readyState < remoteVideo.HAVE_CURRENT_DATA)\n throw new Error('No video stream data available')\n\n var canvas = document.createElement('canvas')\n canvas.width = remoteVideo.videoWidth\n canvas.height = remoteVideo.videoHeight\n\n canvas.getContext('2d').drawImage(remoteVideo, 0, 0)\n\n return canvas\n }\n }\n })\n\n // Init PeerConnection\n if (!pc) {\n pc = new RTCPeerConnection(configuration);\n if (useDataChannels && !dataChannel) {\n var dcId = 'WebRtcPeer-' + self.id\n var dcOptions = undefined\n if (dataChannelConfig) {\n dcId = dataChannelConfig.id || dcId\n dcOptions = dataChannelConfig.options\n }\n dataChannel = pc.createDataChannel(dcId, dcOptions);\n if (dataChannelConfig) {\n dataChannel.onopen = dataChannelConfig.onopen;\n dataChannel.onclose = dataChannelConfig.onclose;\n dataChannel.onmessage = dataChannelConfig.onmessage;\n dataChannel.onbufferedamountlow = dataChannelConfig.onbufferedamountlow;\n dataChannel.onerror = dataChannelConfig.onerror || noop;\n }\n }\n }\n\n pc.addEventListener('icecandidate', function (event) {\n var candidate = event.candidate\n\n if (EventEmitter.listenerCount(self, 'icecandidate') ||\n EventEmitter.listenerCount(\n self, 'candidategatheringdone')) {\n if (candidate) {\n var cand\n\n if (multistream && usePlanB) {\n cand = interop.candidateToUnifiedPlan(candidate)\n } else {\n cand = candidate\n }\n\n self.emit('icecandidate', cand)\n candidategatheringdone = false\n } else if (!candidategatheringdone) {\n self.emit('candidategatheringdone')\n candidategatheringdone = true\n }\n } else if (!candidategatheringdone) {\n // Not listening to 'icecandidate' or 'candidategatheringdone' events, queue\n // the candidate until one of them is listened\n candidatesQueueOut.push(candidate)\n\n if (!candidate) candidategatheringdone = true\n }\n })\n\n pc.ontrack = options.onaddstream\n pc.onnegotiationneeded = options.onnegotiationneeded\n this.on('newListener', function (event, listener) {\n if (event === 'icecandidate' || event === 'candidategatheringdone') {\n while (candidatesQueueOut.length) {\n var candidate = candidatesQueueOut.shift()\n\n if (!candidate === (event === 'candidategatheringdone')) {\n listener(candidate)\n }\n }\n }\n })\n\n var addIceCandidate = bufferizeCandidates(pc)\n\n /**\n * Callback function invoked when an ICE candidate is received. Developers are\n * expected to invoke this function in order to complete the SDP negotiation.\n *\n * @function module:kurentoUtils.WebRtcPeer.prototype.addIceCandidate\n *\n * @param iceCandidate - Literal object with the ICE candidate description\n * @param callback - Called when the ICE candidate has been added.\n */\n this.addIceCandidate = function (iceCandidate, callback) {\n var candidate\n\n if (multistream && usePlanB) {\n candidate = interop.candidateToPlanB(iceCandidate)\n } else {\n candidate = new RTCIceCandidate(iceCandidate)\n }\n\n logger.debug('Remote ICE candidate received', iceCandidate)\n callback = (callback || noop).bind(this)\n addIceCandidate(candidate, callback)\n }\n\n this.generateOffer = function (callback) {\n callback = callback.bind(this)\n\n var offerAudio = true\n var offerVideo = true\n // Constraints must have both blocks\n if (mediaConstraints) {\n offerAudio = (typeof mediaConstraints.audio === 'boolean') ?\n mediaConstraints.audio : true\n offerVideo = (typeof mediaConstraints.video === 'boolean') ?\n mediaConstraints.video : true\n }\n\n var browserDependantConstraints = {\n offerToReceiveAudio: (mode !== 'sendonly' && offerAudio),\n offerToReceiveVideo: (mode !== 'sendonly' && offerVideo)\n }\n\n //FIXME: clarify possible constraints passed to createOffer()\n /*var constraints = recursive(browserDependantConstraints,\n connectionConstraints)*/\n\n var constraints = browserDependantConstraints;\n\n logger.debug('constraints: ' + JSON.stringify(constraints))\n\n pc.createOffer(constraints).then(function (offer) {\n logger.debug('Created SDP offer')\n offer = mangleSdpToAddSimulcast(offer)\n return pc.setLocalDescription(offer)\n }).then(function () {\n var localDescription = pc.localDescription\n logger.debug('Local description set', localDescription.sdp)\n if (multistream && usePlanB) {\n localDescription = interop.toUnifiedPlan(localDescription)\n logger.debug('offer::origPlanB->UnifiedPlan', dumpSDP(\n localDescription))\n }\n callback(null, localDescription.sdp, self.processAnswer.bind(\n self))\n }).catch(callback)\n }\n\n this.getLocalSessionDescriptor = function () {\n return pc.localDescription\n }\n\n this.getRemoteSessionDescriptor = function () {\n return pc.remoteDescription\n }\n\n function setRemoteVideo() {\n if (remoteVideo) {\n var stream = pc.getRemoteStreams()[0]\n var url = stream ? URL.createObjectURL(stream) : ''\n\n remoteVideo.pause()\n remoteVideo.src = url\n remoteVideo.load()\n\n logger.debug('Remote URL:', url)\n }\n }\n\n this.showLocalVideo = function () {\n localVideo.src = URL.createObjectURL(videoStream)\n localVideo.muted = true\n }\n\n this.send = function (data) {\n if (dataChannel && dataChannel.readyState === 'open') {\n dataChannel.send(data)\n } else {\n logger.warn(\n 'Trying to send data over a non-existing or closed data channel')\n }\n }\n\n /**\n * Callback function invoked when a SDP answer is received. Developers are\n * expected to invoke this function in order to complete the SDP negotiation.\n *\n * @function module:kurentoUtils.WebRtcPeer.prototype.processAnswer\n *\n * @param sdpAnswer - Description of sdpAnswer\n * @param callback -\n * Invoked after the SDP answer is processed, or there is an error.\n */\n this.processAnswer = function (sdpAnswer, callback) {\n callback = (callback || noop).bind(this)\n\n var answer = new RTCSessionDescription({\n type: 'answer',\n sdp: sdpAnswer\n })\n\n if (multistream && usePlanB) {\n var planBAnswer = interop.toPlanB(answer)\n logger.debug('asnwer::planB', dumpSDP(planBAnswer))\n answer = planBAnswer\n }\n\n logger.debug('SDP answer received, setting remote description')\n\n if (pc.signalingState === 'closed') {\n return callback('PeerConnection is closed')\n }\n\n pc.setRemoteDescription(answer, function () {\n setRemoteVideo()\n\n callback()\n },\n callback)\n }\n\n /**\n * Callback function invoked when a SDP offer is received. Developers are\n * expected to invoke this function in order to complete the SDP negotiation.\n *\n * @function module:kurentoUtils.WebRtcPeer.prototype.processOffer\n *\n * @param sdpOffer - Description of sdpOffer\n * @param callback - Called when the remote description has been set\n * successfully.\n */\n this.processOffer = function (sdpOffer, callback) {\n callback = callback.bind(this)\n\n var offer = new RTCSessionDescription({\n type: 'offer',\n sdp: sdpOffer\n })\n\n if (multistream && usePlanB) {\n var planBOffer = interop.toPlanB(offer)\n logger.debug('offer::planB', dumpSDP(planBOffer))\n offer = planBOffer\n }\n\n logger.debug('SDP offer received, setting remote description')\n\n if (pc.signalingState === 'closed') {\n return callback('PeerConnection is closed')\n }\n\n pc.setRemoteDescription(offer).then(function () {\n return setRemoteVideo()\n }).then(function () {\n return pc.createAnswer()\n }).then(function (answer) {\n answer = mangleSdpToAddSimulcast(answer)\n logger.debug('Created SDP answer')\n return pc.setLocalDescription(answer)\n }).then(function () {\n var localDescription = pc.localDescription\n if (multistream && usePlanB) {\n localDescription = interop.toUnifiedPlan(localDescription)\n logger.debug('answer::origPlanB->UnifiedPlan', dumpSDP(\n localDescription))\n }\n logger.debug('Local description set', localDescription.sdp)\n callback(null, localDescription.sdp)\n }).catch(callback)\n }\n\n function mangleSdpToAddSimulcast(answer) {\n if (simulcast) {\n if (browser.name === 'Chrome' || browser.name === 'Chromium') {\n logger.debug('Adding multicast info')\n answer = new RTCSessionDescription({\n 'type': answer.type,\n 'sdp': removeFIDFromOffer(answer.sdp) + getSimulcastInfo(\n videoStream)\n })\n } else {\n logger.warn('Simulcast is only available in Chrome browser.')\n }\n }\n\n return answer\n }\n\n /**\n * This function creates the RTCPeerConnection object taking into account the\n * properties received in the constructor. It starts the SDP negotiation\n * process: generates the SDP offer and invokes the onsdpoffer callback. This\n * callback is expected to send the SDP offer, in order to obtain an SDP\n * answer from another peer.\n */\n function start() {\n if (pc.signalingState === 'closed') {\n callback(\n 'The peer connection object is in \"closed\" state. This is most likely due to an invocation of the dispose method before accepting in the dialogue'\n )\n }\n\n if (videoStream && localVideo) {\n self.showLocalVideo()\n }\n\n if (videoStream) {\n pc.addStream(videoStream)\n }\n\n if (audioStream) {\n pc.addStream(audioStream)\n }\n\n // [Hack] https://code.google.com/p/chromium/issues/detail?id=443558\n var browser = parser.getBrowser()\n if (mode === 'sendonly' &&\n (browser.name === 'Chrome' || browser.name === 'Chromium') &&\n browser.major === 39) {\n mode = 'sendrecv'\n }\n\n callback()\n }\n\n if (mode !== 'recvonly' && !videoStream && !audioStream) {\n function getMedia(constraints) {\n if (constraints === undefined) {\n constraints = MEDIA_CONSTRAINTS\n }\n\n navigator.mediaDevices.getUserMedia(constraints).then(function (stream) {\n videoStream = stream\n start()\n }).catch(callback);\n }\n if (sendSource === 'webcam') {\n getMedia(mediaConstraints)\n } else {\n getScreenConstraints(sendSource, function (error, constraints_) {\n if (error)\n return callback(error)\n\n constraints = [mediaConstraints]\n constraints.unshift(constraints_)\n getMedia(recursive.apply(undefined, constraints))\n }, guid)\n }\n } else {\n setTimeout(start, 0)\n }\n\n this.on('_dispose', function () {\n if (localVideo) {\n localVideo.pause()\n localVideo.src = ''\n localVideo.load()\n //Unmute local video in case the video tag is later used for remote video\n localVideo.muted = false\n }\n if (remoteVideo) {\n remoteVideo.pause()\n remoteVideo.src = ''\n remoteVideo.load()\n }\n self.removeAllListeners()\n\n if (window.cancelChooseDesktopMedia !== undefined) {\n window.cancelChooseDesktopMedia(guid)\n }\n })\n}\ninherits(WebRtcPeer, EventEmitter)\n\nfunction createEnableDescriptor(type) {\n var method = 'get' + type + 'Tracks'\n\n return {\n enumerable: true,\n get: function () {\n // [ToDo] Should return undefined if not all tracks have the same value?\n\n if (!this.peerConnection) return\n\n var streams = this.peerConnection.getLocalStreams()\n if (!streams.length) return\n\n for (var i = 0, stream; stream = streams[i]; i++) {\n var tracks = stream[method]()\n for (var j = 0, track; track = tracks[j]; j++)\n if (!track.enabled) return false\n }\n\n return true\n },\n set: function (value) {\n function trackSetEnable(track) {\n track.enabled = value\n }\n\n this.peerConnection.getLocalStreams().forEach(function (stream) {\n stream[method]().forEach(trackSetEnable)\n })\n }\n }\n}\n\nObject.defineProperties(WebRtcPeer.prototype, {\n 'enabled': {\n enumerable: true,\n get: function () {\n return this.audioEnabled && this.videoEnabled\n },\n set: function (value) {\n this.audioEnabled = this.videoEnabled = value\n }\n },\n 'audioEnabled': createEnableDescriptor('Audio'),\n 'videoEnabled': createEnableDescriptor('Video')\n})\n\nWebRtcPeer.prototype.getLocalStream = function (index) {\n if (this.peerConnection) {\n return this.peerConnection.getLocalStreams()[index || 0]\n }\n}\n\nWebRtcPeer.prototype.getRemoteStream = function (index) {\n if (this.peerConnection) {\n return this.peerConnection.getRemoteStreams()[index || 0]\n }\n}\n\n/**\n * @description This method frees the resources used by WebRtcPeer.\n *\n * @function module:kurentoUtils.WebRtcPeer.prototype.dispose\n */\nWebRtcPeer.prototype.dispose = function () {\n logger.debug('Disposing WebRtcPeer')\n\n var pc = this.peerConnection\n var dc = this.dataChannel\n try {\n if (dc) {\n if (dc.signalingState === 'closed') return\n\n dc.close()\n }\n\n if (pc) {\n if (pc.signalingState === 'closed') return\n\n pc.getLocalStreams().forEach(streamStop)\n\n // FIXME This is not yet implemented in firefox\n // if(videoStream) pc.removeStream(videoStream);\n // if(audioStream) pc.removeStream(audioStream);\n\n pc.close()\n }\n } catch (err) {\n logger.warn('Exception disposing webrtc peer ' + err)\n }\n\n this.emit('_dispose')\n}\n\n//\n// Specialized child classes\n//\n\nfunction WebRtcPeerRecvonly(options, callback) {\n if (!(this instanceof WebRtcPeerRecvonly)) {\n return new WebRtcPeerRecvonly(options, callback)\n }\n\n WebRtcPeerRecvonly.super_.call(this, 'recvonly', options, callback)\n}\ninherits(WebRtcPeerRecvonly, WebRtcPeer)\n\nfunction WebRtcPeerSendonly(options, callback) {\n if (!(this instanceof WebRtcPeerSendonly)) {\n return new WebRtcPeerSendonly(options, callback)\n }\n\n WebRtcPeerSendonly.super_.call(this, 'sendonly', options, callback)\n}\ninherits(WebRtcPeerSendonly, WebRtcPeer)\n\nfunction WebRtcPeerSendrecv(options, callback) {\n if (!(this instanceof WebRtcPeerSendrecv)) {\n return new WebRtcPeerSendrecv(options, callback)\n }\n\n WebRtcPeerSendrecv.super_.call(this, 'sendrecv', options, callback)\n}\ninherits(WebRtcPeerSendrecv, WebRtcPeer)\n\nfunction harkUtils(stream, options) {\n return hark(stream, options);\n}\n\nexports.bufferizeCandidates = bufferizeCandidates\n\nexports.WebRtcPeerRecvonly = WebRtcPeerRecvonly\nexports.WebRtcPeerSendonly = WebRtcPeerSendonly\nexports.WebRtcPeerSendrecv = WebRtcPeerSendrecv\nexports.hark = harkUtils\n\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-utils-js/WebRtcPeer.js","/*\n * (C) Copyright 2014 Kurento (http://kurento.org/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\n\n/**\n * This module contains a set of reusable components that have been found useful\n * during the development of the WebRTC applications with Kurento.\n * \n * @module kurentoUtils\n * \n * @copyright 2014 Kurento (http://kurento.org/)\n * @license ALv2\n */\n\nvar WebRtcPeer = require('./WebRtcPeer');\n\nexports.WebRtcPeer = WebRtcPeer;\n\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/KurentoUtils/kurento-utils-js/index.js","/*\n * (C) Copyright 2017 OpenVidu (http://openvidu.io/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nimport { OpenViduInternal } from '../OpenViduInternal/OpenViduInternal';\n\nimport { Session } from './Session';\nimport { Publisher } from './Publisher';\n\nimport * as adapter from 'webrtc-adapter';\n\nif (window) {\n window[\"adapter\"] = adapter;\n}\n\nexport class OpenVidu {\n\n openVidu: OpenViduInternal;\n\n constructor() {\n this.openVidu = new OpenViduInternal();\n console.info(\"'OpenVidu' initialized\");\n };\n\n initSession(apiKey: string, sessionId: string): Session;\n initSession(sessionId: string): Session;\n\n initSession(param1, param2?): any {\n if (this.checkSystemRequirements()) {\n if (typeof param2 == \"string\") {\n return new Session(this.openVidu.initSession(param2), this);\n } else {\n return new Session(this.openVidu.initSession(param1), this);\n }\n } else {\n alert(\"Browser not supported\");\n }\n }\n\n initPublisher(parentId: string): Publisher;\n initPublisher(parentId: string, cameraOptions: any): Publisher;\n initPublisher(parentId: string, cameraOptions: any, callback: any): Publisher;\n\n initPublisher(parentId: string, cameraOptions?: any, callback?: Function): any {\n if (this.checkSystemRequirements()) {\n if (cameraOptions != null) {\n let cameraOptionsAux = {\n audio: cameraOptions.audio != null ? cameraOptions.audio : true,\n video: cameraOptions.video != null ? cameraOptions.video : true,\n data: true,\n mediaConstraints: this.openVidu.generateMediaConstraints(cameraOptions.quality)\n };\n cameraOptions = cameraOptionsAux;\n } else {\n cameraOptions = {\n audio: true,\n video: true,\n data: true,\n mediaConstraints: {\n audio: true,\n video: { width: { ideal: 1280 } }\n }\n }\n }\n var publisher = new Publisher(this.openVidu.initPublisherTagged(parentId, cameraOptions, callback), parentId);\n \n console.info(\"'Publisher' initialized\");\n return publisher;\n\n } else {\n alert(\"Browser not supported\");\n }\n }\n\n checkSystemRequirements(): number {\n let browser = adapter.browserDetails.browser;\n let version = adapter.browserDetails.version;\n\n //Bug fix: 'navigator.userAgent' in Firefox for Ubuntu 14.04 does not return \"Firefox/[version]\" in the string, so version returned is null\n if ((browser == 'firefox') && (version == null)) {\n return 1;\n }\n if (((browser == 'chrome') && (version >= 28)) || ((browser == 'edge') && (version >= 12)) || ((browser == 'firefox') && (version >= 22))) {\n return 1;\n } else {\n return 0;\n }\n }\n\n getDevices(callback) {\n navigator.mediaDevices.enumerateDevices().then((deviceInfos) => {\n callback(null, deviceInfos);\n }).catch((error) => {\n console.error(\"Error getting devices\", error);\n callback(error, null);\n });\n }\n\n enableProdMode() {\n console.log = function() {};\n console.debug = function() {};\n console.info = function() {};\n console.warn = function() {};\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenVidu/OpenVidu.ts","export * from './OpenVidu';\nexport * from './Session';\nexport * from './Publisher';\nexport * from './Subscriber';\nexport * from '../OpenViduInternal/Stream';\nexport * from '../OpenViduInternal/Connection';\n\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenVidu/index.ts","/*\n * (C) Copyright 2017 OpenVidu (http://openvidu.io/)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n */\nimport { SessionInternal, SessionOptions } from './SessionInternal';\nimport { Stream } from './Stream';\nimport * as RpcBuilder from '../KurentoUtils/kurento-jsonrpc';\n\nexport type Callback = (error?: any, openVidu?: T) => void;\n\nexport class OpenViduInternal {\n\n private wsUri;\n private session: SessionInternal;\n private jsonRpcClient: any;\n private rpcParams: any;\n private callback: Callback;\n private camera: Stream;\n private remoteStreams: Stream[] = [];\n\n private secret: string;\n\n constructor() { };\n\n\n /* NEW METHODS */\n initSession(sessionId) {\n console.info(\"'Session' initialized with 'sessionId' [\" + sessionId + \"]\");\n this.session = new SessionInternal(this, sessionId);\n return this.session;\n }\n\n initPublisherTagged(parentId: string, cameraOptions: any, callback?) {\n\n this.getCamera(cameraOptions);\n\n if (callback == null) {\n this.camera.requestCameraAccess((error, camera) => {\n if (error) {\n console.error(\"Error accessing the camera\", error);\n }\n else {\n this.camera.setVideoElement(this.cameraReady(camera!, parentId));\n }\n });\n return this.camera;\n } else {\n this.camera.requestCameraAccess((error, camera) => {\n if (error) {\n callback(error);\n }\n else {\n this.camera.setVideoElement(this.cameraReady(camera!, parentId));\n callback(undefined);\n }\n });\n return this.camera;\n }\n }\n\n cameraReady(camera: Stream, parentId: string) {\n this.camera = camera;\n let videoElement = this.camera.playOnlyVideo(parentId, null);\n this.camera.emitStreamReadyEvent();\n return videoElement;\n }\n\n initPublisher(cameraOptions: any, callback) {\n this.getCamera(cameraOptions);\n this.camera.requestCameraAccess((error, camera) => {\n if (error) callback(error);\n else callback(undefined);\n });\n }\n\n getLocalStream() {\n return this.camera;\n }\n\n getRemoteStreams() {\n return this.remoteStreams;\n }\n /* NEW METHODS */\n\n getWsUri() {\n return this.wsUri;\n }\n\n setWsUri(wsUri: string) {\n this.wsUri = wsUri;\n }\n\n getSecret() {\n return this.secret;\n }\n\n setSecret(secret: string) {\n this.secret = secret;\n }\n\n getOpenViduServerURL() {\n return 'https://' + this.wsUri.split(\"wss://\")[1].split(\"/room\")[0];\n }\n\n getRoom() {\n return this.session;\n }\n\n connect(callback: Callback): void {\n\n this.callback = callback;\n\n this.initJsonRpcClient(this.wsUri);\n }\n\n private initJsonRpcClient(wsUri: string): void {\n\n let config = {\n heartbeat: 3000,\n sendCloseMessage: false,\n ws: {\n uri: wsUri,\n useSockJS: false,\n onconnected: this.connectCallback.bind(this),\n ondisconnect: this.disconnectCallback.bind(this),\n onreconnecting: this.reconnectingCallback.bind(this),\n onreconnected: this.reconnectedCallback.bind(this)\n },\n rpc: {\n requestTimeout: 15000,\n //notifications\n participantJoined: this.onParticipantJoined.bind(this),\n participantPublished: this.onParticipantPublished.bind(this),\n participantUnpublished: this.onParticipantLeft.bind(this),\n participantLeft: this.onParticipantLeft.bind(this),\n participantEvicted: this.onParticipantEvicted.bind(this),\n sendMessage: this.onNewMessage.bind(this),\n iceCandidate: this.iceCandidateEvent.bind(this),\n mediaError: this.onMediaError.bind(this),\n custonNotification: this.customNotification.bind(this)\n }\n };\n\n this.jsonRpcClient = new RpcBuilder.clients.JsonRpcClient(config);\n }\n\n\n private customNotification(params) {\n if (this.isRoomAvailable()) {\n this.session.emitEvent(\"custom-message-received\", [{ params: params }]);\n }\n }\n\n private connectCallback(error) {\n if (error) {\n this.callback(error);\n } else {\n this.callback(null);\n }\n }\n\n private isRoomAvailable() {\n if (this.session !== undefined && this.session instanceof SessionInternal) {\n return true;\n } else {\n console.warn('Room instance not found');\n return false;\n }\n }\n\n private disconnectCallback() {\n console.warn('Websocket connection lost');\n if (this.isRoomAvailable()) {\n this.session.onLostConnection();\n } else {\n alert('Connection error. Please reload page.');\n }\n }\n\n private reconnectingCallback() {\n console.warn('Websocket connection lost (reconnecting)');\n if (this.isRoomAvailable()) {\n this.session.onLostConnection();\n } else {\n alert('Connection error. Please reload page.');\n }\n }\n\n private reconnectedCallback() {\n console.warn('Websocket reconnected');\n }\n\n private onParticipantJoined(params) {\n if (this.isRoomAvailable()) {\n this.session.onParticipantJoined(params);\n }\n }\n\n private onParticipantPublished(params) {\n if (this.isRoomAvailable()) {\n this.session.onParticipantPublished(params);\n }\n }\n\n private onParticipantLeft(params) {\n if (this.isRoomAvailable()) {\n this.session.onParticipantLeft(params);\n }\n }\n\n private onParticipantEvicted(params) {\n if (this.isRoomAvailable()) {\n this.session.onParticipantEvicted(params);\n }\n }\n\n private onNewMessage(params) {\n if (this.isRoomAvailable()) {\n this.session.onNewMessage(params);\n }\n }\n\n private iceCandidateEvent(params) {\n if (this.isRoomAvailable()) {\n this.session.recvIceCandidate(params);\n }\n }\n\n private onRoomClosed(params) {\n if (this.isRoomAvailable()) {\n this.session.onRoomClosed(params);\n }\n }\n\n private onMediaError(params) {\n if (this.isRoomAvailable()) {\n this.session.onMediaError(params);\n }\n }\n\n\n setRpcParams(params: any) {\n this.rpcParams = params;\n }\n\n sendRequest(method, params, callback?) {\n\n if (params && params instanceof Function) {\n callback = params;\n params = undefined;\n }\n\n params = params || {};\n\n if (this.rpcParams && this.rpcParams !== null && this.rpcParams !== undefined) {\n for (let index in this.rpcParams) {\n if (this.rpcParams.hasOwnProperty(index)) {\n params[index] = this.rpcParams[index];\n console.debug('RPC param added to request {' + index + ': ' + this.rpcParams[index] + '}');\n }\n }\n }\n\n console.debug('Sending request: {method:\"' + method + '\", params: ' + JSON.stringify(params) + '}');\n\n this.jsonRpcClient.send(method, params, callback);\n }\n\n close(forced) {\n if (this.isRoomAvailable()) {\n this.session.leave(forced, this.jsonRpcClient);\n }\n };\n\n disconnectParticipant(stream) {\n if (this.isRoomAvailable()) {\n this.session.disconnect(stream);\n }\n }\n\n getCamera(options?) {\n\n if (this.camera) {\n return this.camera;\n }\n\n options = options || {\n audio: true,\n video: true,\n data: true,\n mediaConstraints: {\n audio: true,\n video: { width: { ideal: 1280 } }\n }\n }\n\n options.connection = this.session.getLocalParticipant();\n this.camera = new Stream(this, true, this.session, options);\n return this.camera;\n };\n\n /*joinSession(options: SessionOptions, callback: Callback) {\n \n this.session.configure(options);\n \n this.session.connect2();\n \n this.session.addEventListener('room-connected', roomEvent => callback(undefined,this.session));\n \n this.session.addEventListener('error-room', error => callback(error));\n \n return this.session;\n };*/\n\n //CHAT\n sendMessage(room, user, message) {\n this.sendRequest('sendMessage', {\n message: message,\n userMessage: user,\n roomMessage: room\n }, function (error, response) {\n if (error) {\n console.error(error);\n }\n });\n };\n\n sendCustomRequest(params, callback) {\n this.sendRequest('customRequest', params, callback);\n };\n\n\n\n\n toggleLocalVideoTrack(activate: boolean) {\n this.getCamera().getWebRtcPeer().videoEnabled = activate;\n }\n\n toggleLocalAudioTrack(activate: boolean) {\n this.getCamera().getWebRtcPeer().audioEnabled = activate;\n }\n\n publishLocalVideoAudio() {\n this.toggleLocalVideoTrack(true);\n this.toggleLocalAudioTrack(true);\n }\n\n unpublishLocalVideoAudio() {\n this.toggleLocalVideoTrack(false);\n this.toggleLocalAudioTrack(false);\n }\n\n generateMediaConstraints(quality: string) {\n let mediaConstraints = {\n audio: true,\n video: {}\n }\n let w, h;\n switch (quality) {\n case 'LOW':\n w = 320;\n h = 240;\n break;\n case 'MEDIUM':\n w = 640;\n h = 480;\n break;\n case 'HIGH':\n w = 1280;\n h = 720;\n break;\n default:\n w = 640;\n h = 480;\n }\n mediaConstraints.video['width'] = { exact: w };\n mediaConstraints.video['height'] = { exact: h };\n //mediaConstraints.video['frameRate'] = { ideal: Number((document.getElementById('frameRate')).value) };\n\n return mediaConstraints;\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenViduInternal/OpenViduInternal.ts","import { Stream } from './Stream';\nimport { OpenViduInternal } from './OpenViduInternal';\nimport { Connection, ConnectionOptions } from './Connection';\nimport EventEmitter = require('wolfy87-eventemitter');\n\nconst SECRET_PARAM = '?secret=';\n\nexport interface SessionOptions {\n sessionId: string;\n participantId: string;\n metadata: string;\n subscribeToStreams?: boolean;\n updateSpeakerInterval?: number;\n thresholdSpeaker?: number;\n}\n\nexport class SessionInternal {\n\n private id: string;\n private sessionId: string;\n private ee = new EventEmitter();\n private streams = {};\n private participants = {};\n private participantsSpeaking: Connection[] = [];\n private connected = false;\n public localParticipant: Connection;\n private subscribeToStreams: boolean;\n private updateSpeakerInterval: number;\n public thresholdSpeaker: number;\n private options: SessionOptions;\n\n constructor(private openVidu: OpenViduInternal, sessionId: string) {\n this.sessionId = this.getUrlWithoutSecret(sessionId);\n this.localParticipant = new Connection(this.openVidu, true, this);\n if (!this.openVidu.getWsUri()) {\n this.processOpenViduUrl(sessionId);\n }\n }\n\n private processOpenViduUrl(url: string) {\n this.openVidu.setSecret(this.getSecretFromUrl(url));\n this.openVidu.setWsUri(this.getFinalUrl(url));\n }\n\n private getSecretFromUrl(url: string): string {\n let secret = '';\n if (url.indexOf(SECRET_PARAM) !== -1) {\n secret = url.substring(url.lastIndexOf(SECRET_PARAM) + SECRET_PARAM.length, url.length);\n }\n return secret;\n }\n\n private getUrlWithoutSecret(url: string): string {\n if (url.indexOf(SECRET_PARAM) !== -1) {\n url = url.substring(0, url.lastIndexOf(SECRET_PARAM));\n }\n return url;\n }\n\n private getFinalUrl(url: string): string {\n url = this.getUrlWithoutSecret(url).substring(0, url.lastIndexOf('/')) + '/room';\n if (url.indexOf(\".ngrok.io\") !== -1) {\n // OpenVidu server URL referes to a ngrok IP: secure wss protocol and delete port of URL\n url = url.replace(\"ws://\", \"wss://\");\n let regex = /\\.ngrok\\.io:\\d+/;\n url = url.replace(regex, \".ngrok.io\");\n } else if ((url.indexOf(\"localhost\") !== -1) || (url.indexOf(\"127.0.0.1\") != -1)) {\n // OpenVidu server URL referes to localhost IP\n\n }\n return url;\n }\n\n\n\n /* NEW METHODS */\n connect(token, callback) {\n\n this.openVidu.connect((error) => {\n if (error) {\n callback('ERROR CONNECTING TO OPENVIDU');\n }\n else {\n\n if (!token) {\n token = this.randomToken();\n }\n\n let joinParams = {\n token: token,\n session: this.sessionId,\n metadata: this.options.metadata,\n secret: this.openVidu.getSecret(),\n dataChannels: false\n }\n\n if (this.localParticipant) {\n if (Object.keys(this.localParticipant.getStreams()).some(streamId =>\n this.streams[streamId].isDataChannelEnabled())) {\n joinParams.dataChannels = true;\n }\n }\n\n this.openVidu.sendRequest('joinRoom', joinParams, (error, response) => {\n\n if (error) {\n callback(error);\n } else {\n\n this.connected = true;\n\n let exParticipants = response.value;\n\n // IMPORTANT: Update connectionId with value send by server\n this.localParticipant.connectionId = response.id;\n this.participants[response.id] = this.localParticipant;\n\n let roomEvent = {\n participants: new Array(),\n streams: new Array()\n }\n\n let length = exParticipants.length;\n for (let i = 0; i < length; i++) {\n\n let connection = new Connection(this.openVidu, false, this,\n exParticipants[i]);\n connection.creationTime = new Date().getTime();\n\n this.participants[connection.connectionId] = connection;\n\n roomEvent.participants.push(connection);\n\n let streams = connection.getStreams();\n for (let key in streams) {\n roomEvent.streams.push(streams[key]);\n if (this.subscribeToStreams) {\n streams[key].subscribe();\n }\n }\n }\n\n // Update local Connection object properties with values returned by server\n this.localParticipant.data = response.metadata;\n this.localParticipant.creationTime = new Date().getTime();\n\n // Updates the value of property 'connection' in Session object\n this.ee.emitEvent('update-connection-object', [{ connection: this.localParticipant }]);\n // Own connection created event\n this.ee.emitEvent('connectionCreated', [{ connection: this.localParticipant }]);\n\n // One connection created event for each existing connection in the session\n for (let part of roomEvent.participants) {\n this.ee.emitEvent('connectionCreated', [{ connection: part }]);\n }\n\n //if (this.subscribeToStreams) {\n for (let stream of roomEvent.streams) {\n this.ee.emitEvent('streamCreated', [{ stream }]);\n\n // Adding the remote stream to the OpenVidu object\n this.openVidu.getRemoteStreams().push(stream);\n }\n //}\n\n callback(undefined);\n }\n });\n }\n });\n }\n\n publish() {\n this.openVidu.getCamera().publish();\n }\n /* NEW METHODS */\n\n\n\n\n\n configure(options: SessionOptions) {\n this.options = options;\n this.id = options.sessionId;\n this.subscribeToStreams = options.subscribeToStreams == null ? true : options.subscribeToStreams;\n this.updateSpeakerInterval = options.updateSpeakerInterval || 1500;\n this.thresholdSpeaker = options.thresholdSpeaker || -50;\n this.activateUpdateMainSpeaker();\n }\n\n getId() {\n return this.id;\n }\n\n getSessionId() {\n return this.sessionId;\n }\n\n private activateUpdateMainSpeaker() {\n\n setInterval(() => {\n if (this.participantsSpeaking.length > 0) {\n this.ee.emitEvent('update-main-speaker', [{\n participantId: this.participantsSpeaking[this.participantsSpeaking.length - 1]\n }]);\n }\n }, this.updateSpeakerInterval);\n }\n\n getLocalParticipant() {\n return this.localParticipant;\n }\n\n addEventListener(eventName, listener) {\n this.ee.on(eventName, listener);\n }\n\n addOnceEventListener(eventName, listener) {\n this.ee.once(eventName, listener);\n }\n\n removeListener(eventName, listener) {\n this.ee.off(eventName, listener);\n }\n\n removeEvent(eventName) {\n this.ee.removeEvent(eventName);\n }\n\n emitEvent(eventName, eventsArray) {\n this.ee.emitEvent(eventName, eventsArray);\n }\n\n\n subscribe(stream: Stream) {\n stream.subscribe();\n }\n\n unsuscribe(stream) {\n console.info(\"Unsubscribing from \" + stream.getId());\n this.openVidu.sendRequest('unsubscribeFromVideo', {\n sender: stream.getId()\n },\n function (error, response) {\n if (error) {\n console.error(\"Error unsubscribing from Subscriber\", error);\n } else {\n console.info(\"Unsubscribed correctly from \" + stream.getId());\n }\n });\n }\n\n onParticipantPublished(options) {\n\n options.metadata = this.participants[options.id].data;\n\n // Get the existing Connection created on 'onParticipantJoined' for\n // existing participants or create a new one for new participants\n let connection = this.participants[options.id];\n if (connection) {\n // Update existing Connection\n connection.options = options;\n connection.initStreams(options);\n } else {\n // Create new Connection\n connection = new Connection(this.openVidu, false, this, options);\n }\n\n let pid = connection.connectionId;\n if (!(pid in this.participants)) {\n console.debug(\"Remote Connection not found in connections list by its id [\" + pid + \"]\");\n } else {\n console.debug(\"Remote Connection found in connections list by its id [\" + pid + \"]\");\n }\n\n connection.creationTime = this.participants[pid].creationTime;\n this.participants[pid] = connection;\n\n this.ee.emitEvent('participant-published', [{ connection }]);\n\n let streams = connection.getStreams();\n for (let key in streams) {\n let stream = streams[key];\n\n if (this.subscribeToStreams) {\n stream.subscribe();\n }\n this.ee.emitEvent('streamCreated', [{ stream }]);\n // Adding the remote stream to the OpenVidu object\n this.openVidu.getRemoteStreams().push(stream);\n }\n }\n\n onParticipantJoined(msg) {\n\n let connection = new Connection(this.openVidu, false, this, msg);\n connection.creationTime = new Date().getTime();\n\n let pid = connection.connectionId;\n if (!(pid in this.participants)) {\n this.participants[pid] = connection;\n } else {\n //use existing so that we don't lose streams info\n console.warn(\"Connection already exists in connections list with \" +\n \"the same connectionId, old:\", this.participants[pid], \", joined now:\", connection);\n connection = this.participants[pid];\n }\n\n this.ee.emitEvent('participant-joined', [{\n connection: connection\n }]);\n\n this.ee.emitEvent('connectionCreated', [{\n connection: connection\n }]);\n\n }\n\n onParticipantLeft(msg) {\n\n let connection = this.participants[msg.name];\n\n if (connection !== undefined) {\n delete this.participants[msg.name];\n\n this.ee.emitEvent('participant-left', [{\n connection: connection\n }]);\n\n let streams = connection.getStreams();\n for (let key in streams) {\n this.ee.emitEvent('streamDestroyed', [{\n stream: streams[key],\n preventDefault: () => { this.ee.removeEvent('stream-destroyed-default'); }\n }]);\n this.ee.emitEvent('stream-destroyed-default', [{\n stream: streams[key]\n }]);\n\n // Deleting the removed stream from the OpenVidu object\n let index = this.openVidu.getRemoteStreams().indexOf(streams[key]);\n this.openVidu.getRemoteStreams().splice(index, 1);\n }\n\n connection.dispose();\n\n this.ee.emitEvent('connectionDestroyed', [{\n connection: connection\n }]);\n\n } else {\n console.warn(\"Participant \" + msg.name\n + \" unknown. Participants: \"\n + JSON.stringify(this.participants));\n }\n };\n\n onParticipantEvicted(msg) {\n this.ee.emitEvent('participant-evicted', [{\n localParticipant: this.localParticipant\n }]);\n };\n\n onNewMessage(msg) {\n\n console.info(\"New message: \" + JSON.stringify(msg));\n let room = msg.room;\n let user = msg.user;\n let message = msg.message;\n\n if (user !== undefined) {\n this.ee.emitEvent('newMessage', [{\n room: room,\n user: user,\n message: message\n }]);\n } else {\n console.warn(\"User undefined in new message:\", msg);\n }\n }\n\n recvIceCandidate(msg) {\n\n let candidate = {\n candidate: msg.candidate,\n sdpMid: msg.sdpMid,\n sdpMLineIndex: msg.sdpMLineIndex\n }\n\n let connection = this.participants[msg.endpointName];\n if (!connection) {\n console.error(\"Participant not found for endpoint \" +\n msg.endpointName + \". Ice candidate will be ignored.\",\n candidate);\n return;\n }\n\n let streams = connection.getStreams();\n for (let key in streams) {\n let stream = streams[key];\n stream.getWebRtcPeer().addIceCandidate(candidate, function (error) {\n if (error) {\n console.error(\"Error adding candidate for \" + key\n + \" stream of endpoint \" + msg.endpointName\n + \": \" + error);\n }\n });\n }\n }\n\n onRoomClosed(msg) {\n\n console.info(\"Room closed: \" + JSON.stringify(msg));\n let room = msg.room;\n if (room !== undefined) {\n this.ee.emitEvent('room-closed', [{\n room: room\n }]);\n } else {\n console.warn(\"Room undefined in on room closed\", msg);\n }\n }\n\n onLostConnection() {\n\n if (!this.connected) {\n console.warn('Not connected to room: if you are not debugging, this is probably a certificate error');\n if (window.confirm('If you are not debugging, this is probably a certificate error at \\\"' + this.openVidu.getOpenViduServerURL() + '\\\"\\n\\nClick OK to navigate and accept it')) {\n location.assign(this.openVidu.getOpenViduServerURL() + '/accept-certificate');\n };\n return;\n }\n\n console.warn('Lost connection in Session ' + this.id);\n let room = this.id;\n if (room !== undefined) {\n this.ee.emitEvent('lost-connection', [{ room }]);\n } else {\n console.warn('Room undefined when lost connection');\n }\n }\n\n onMediaError(params) {\n\n console.error(\"Media error: \" + JSON.stringify(params));\n let error = params.error;\n if (error) {\n this.ee.emitEvent('error-media', [{\n error: error\n }]);\n } else {\n console.warn(\"Received undefined media error. Params:\", params);\n }\n }\n\n /*\n * forced means the user was evicted, no need to send the 'leaveRoom' request\n */\n leave(forced, jsonRpcClient) {\n\n forced = !!forced;\n\n console.info(\"Leaving Session (forced=\" + forced + \")\");\n\n if (this.connected && !forced) {\n this.openVidu.sendRequest('leaveRoom', function (error, response) {\n if (error) {\n console.error(error);\n }\n jsonRpcClient.close();\n });\n } else {\n jsonRpcClient.close();\n }\n this.connected = false;\n if (this.participants) {\n for (let pid in this.participants) {\n this.participants[pid].dispose();\n delete this.participants[pid];\n }\n }\n }\n\n disconnect(stream: Stream) {\n\n let connection = stream.getParticipant();\n if (!connection) {\n console.error(\"Stream to disconnect has no participant\", stream);\n return;\n }\n\n delete this.participants[connection.connectionId];\n connection.dispose();\n\n if (connection === this.localParticipant) {\n\n console.info(\"Unpublishing my media (I'm \" + connection.connectionId + \")\");\n delete this.localParticipant;\n this.openVidu.sendRequest('unpublishVideo', function (error, response) {\n if (error) {\n console.error(error);\n } else {\n console.info(\"Media unpublished correctly\");\n }\n });\n\n } else {\n this.unsuscribe(stream);\n }\n }\n\n unpublish(stream: Stream) {\n\n let connection = stream.getParticipant();\n if (!connection) {\n console.error(\"Stream to disconnect has no participant\", stream);\n return;\n }\n\n if (connection === this.localParticipant) {\n\n delete this.participants[connection.connectionId];\n connection.dispose();\n\n console.info(\"Unpublishing my media (I'm \" + connection.connectionId + \")\");\n delete this.localParticipant;\n this.openVidu.sendRequest('unpublishVideo', function (error, response) {\n if (error) {\n console.error(error);\n } else {\n console.info(\"Media unpublished correctly\");\n }\n });\n }\n }\n\n getStreams() {\n return this.streams;\n }\n\n addParticipantSpeaking(participantId) {\n this.participantsSpeaking.push(participantId);\n }\n\n removeParticipantSpeaking(participantId) {\n let pos = -1;\n for (let i = 0; i < this.participantsSpeaking.length; i++) {\n if (this.participantsSpeaking[i] == participantId) {\n pos = i;\n break;\n }\n }\n if (pos != -1) {\n this.participantsSpeaking.splice(pos, 1);\n }\n }\n\n stringClientMetadata(metadata): string {\n if (!(typeof metadata === 'string')) {\n return JSON.stringify(metadata);\n } else {\n return metadata;\n }\n }\n \n private randomToken(): string {\n return Math.random().toString(36).slice(2) + Math.random().toString(36).slice(2);\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// /home/pablo/Documents/Git/openvidu/openvidu-browser/src/main/resources/ts/OpenViduInternal/SessionInternal.ts","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs/Subject';\n\n@Injectable()\nexport class InfoService {\n\n info: string;\n newInfo$: Subject;\n\n constructor() {\n this.newInfo$ = new Subject();\n }\n\n getInfo() {\n return this.info;\n }\n\n updateInfo(info: string) {\n this.info = info;\n this.newInfo$.next(info);\n }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/app/services/info.service.ts","/*\n * options: name: XXX data: true (Maybe this is based on webrtc) audio: true,\n * video: true, url: \"file:///...\" > Player screen: true > Desktop (implicit\n * video:true, audio:false) audio: true, video: true > Webcam\n *\n * stream.hasAudio(); stream.hasVideo(); stream.hasData();\n */\nimport { Connection } from './Connection';\nimport { SessionInternal } from './SessionInternal';\nimport { OpenViduInternal, Callback } from './OpenViduInternal';\nimport EventEmitter = require('wolfy87-eventemitter');\nimport * as kurentoUtils from '../KurentoUtils/kurento-utils-js';\n\nimport * as adapter from 'webrtc-adapter';\ndeclare var navigator: any;\ndeclare var RTCSessionDescription: any;\n\nif (window) {\n window[\"adapter\"] = adapter;\n}\n\nfunction jq(id: string): string {\n return id.replace(/(@|:|\\.|\\[|\\]|,)/g, \"\\\\$1\");\n}\n\nfunction show(id: string) {\n document.getElementById(jq(id))!.style.display = 'block';\n}\n\nfunction hide(id: string) {\n document.getElementById(jq(id))!.style.display = 'none';\n}\n\nexport interface StreamOptions {\n id: string;\n connection: Connection;\n recvVideo: any;\n recvAudio: any;\n video: boolean;\n audio: boolean;\n data: boolean;\n mediaConstraints: any;\n audioOnly: boolean;\n}\n\nexport interface VideoOptions {\n thumb: string;\n video: HTMLVideoElement;\n}\n\nexport class Stream {\n\n public connection: Connection;\n\n private ee = new EventEmitter();\n private wrStream: any;\n private wp: any;\n private id: string;\n private video: HTMLVideoElement;\n private videoElements: VideoOptions[] = [];\n private elements: HTMLDivElement[] = [];\n private speechEvent: any;\n private recvVideo: any;\n private recvAudio: any;\n private sendVideo: boolean;\n private sendAudio: boolean;\n private mediaConstraints: any;\n private showMyRemote = false;\n private localMirrored = false;\n private chanId = 0;\n private dataChannel: boolean;\n private dataChannelOpened = false;\n\n private audioOnly = false;\n\n private videoSrcObject: MediaStream | null;\n private parentId: string;\n public isReady: boolean = false;\n public isVideoELementCreated: boolean = false;\n public accessIsAllowed: boolean = false;\n public accessIsDenied: boolean = false;\n\n constructor(private openVidu: OpenViduInternal, private local: boolean, private room: SessionInternal, options: StreamOptions) {\n\n if (options.id) {\n this.id = options.id;\n } else {\n this.id = \"webcam\";\n }\n\n this.connection = options.connection;\n this.recvVideo = options.recvVideo;\n this.recvAudio = options.recvAudio;\n this.dataChannel = options.data || false;\n this.sendVideo = options.video;\n this.sendAudio = options.audio;\n this.mediaConstraints = options.mediaConstraints;\n this.audioOnly = options.audioOnly || false;\n\n this.addEventListener('src-added', (srcEvent) => {\n this.videoSrcObject = srcEvent.srcObject;\n if (this.video) this.video.srcObject = srcEvent.srcObject;\n console.debug(\"Video srcObject [\" + srcEvent.srcObject + \"] added to stream [\" + this.getId() + \"]\");\n });\n }\n\n emitSrcEvent(wrstream) {\n this.ee.emitEvent('src-added', [{\n srcObject: wrstream\n }]);\n }\n\n emitStreamReadyEvent() {\n this.ee.emitEvent('stream-ready'), [{}];\n }\n\n getVideoSrcObject() {\n return this.videoSrcObject;\n }\n\n removeVideo(parentElement: string);\n removeVideo(parentElement: Element);\n removeVideo();\n\n removeVideo(parentElement?) {\n if (typeof parentElement === \"string\") {\n document.getElementById(parentElement)!.removeChild(this.video);\n } else if (parentElement instanceof Element) {\n parentElement.removeChild(this.video);\n }\n else if (!parentElement) {\n if (document.getElementById(this.parentId)) {\n document.getElementById(this.parentId)!.removeChild(this.video);\n }\n }\n }\n\n getVideoElement(): HTMLVideoElement {\n return this.video;\n }\n\n setVideoElement(video: HTMLVideoElement) {\n this.video = video;\n }\n\n\n\n\n\n\n getRecvVideo() {\n return this.recvVideo;\n }\n\n getRecvAudio() {\n return this.recvAudio;\n }\n\n\n subscribeToMyRemote() {\n this.showMyRemote = true;\n }\n\n displayMyRemote() {\n return this.showMyRemote;\n }\n\n mirrorLocalStream(wr) {\n this.showMyRemote = true;\n this.localMirrored = true;\n if (wr) {\n this.wrStream = wr;\n this.emitSrcEvent(this.wrStream);\n }\n }\n\n isLocalMirrored() {\n return this.localMirrored;\n }\n\n getChannelName() {\n return this.getId() + '_' + this.chanId++;\n }\n\n\n isDataChannelEnabled() {\n return this.dataChannel;\n }\n\n\n isDataChannelOpened() {\n return this.dataChannelOpened;\n }\n\n onDataChannelOpen(event) {\n console.debug('Data channel is opened');\n this.dataChannelOpened = true;\n }\n\n onDataChannelClosed(event) {\n console.debug('Data channel is closed');\n this.dataChannelOpened = false;\n }\n\n sendData(data) {\n if (this.wp === undefined) {\n throw new Error('WebRTC peer has not been created yet');\n }\n if (!this.dataChannelOpened) {\n throw new Error('Data channel is not opened');\n }\n console.info(\"Sending through data channel: \" + data);\n this.wp.send(data);\n }\n\n getWrStream() {\n return this.wrStream;\n }\n\n getWebRtcPeer() {\n return this.wp;\n }\n\n addEventListener(eventName: string, listener: any) {\n this.ee.addListener(eventName, listener);\n }\n\n addOnceEventListener(eventName: string, listener: any) {\n this.ee.addOnceListener(eventName, listener);\n }\n\n removeListener(eventName) {\n this.ee.removeAllListeners(eventName);\n }\n\n showSpinner(spinnerParentId: string) {\n let progress = document.createElement('div');\n progress.id = 'progress-' + this.getId();\n progress.style.background = \"center transparent url('img/spinner.gif') no-repeat\";\n let spinnerParent = document.getElementById(spinnerParentId);\n if (spinnerParent) {\n spinnerParent.appendChild(progress);\n }\n }\n\n hideSpinner(spinnerId?: string) {\n spinnerId = (spinnerId === undefined) ? this.getId() : spinnerId;\n hide('progress-' + spinnerId);\n }\n\n playOnlyVideo(parentElement, thumbnailId) {\n\n // TO-DO: check somehow if the stream is audio only, so the element created is