| <html> | 
| <head> | 
| <script src="libs/strophe.min.js" ></script> | 
| <script src="libs/strophe.muc.min.js" ></script> | 
| <script src="libs/strophe.disco.min.js" ></script> | 
| <script src="libs/strophe.jingle.sdp.js"></script> | 
| <script src="libs/jquery-3.5.1.min.js"></script> | 
| <script src="libs/EventEmitter.min.js" ></script> | 
| <script src="xmppvideoroom.js" ></script> | 
| <script src="xmppconfig.js" ></script> | 
| <script src="webrtcconfig.js" ></script> | 
| <link rel="icon" type="image/ico" href="jitsi.ico" /> | 
| <link rel="stylesheet" type="text/css" href="styles.css"> | 
| </head> | 
| <body>  | 
|     XMPP Url:<input id="xmppServer" type="text" size="50" />  | 
|     Room id:<input id="xmppRoom" type="text" /> | 
|     <input type="button" onclick="openroom()" value="OpenRoom" /> | 
|     <nav id="menu"></nav> | 
|     <iframe src="jitsiroom.html" style="height:100%; width: 100%;"></iframe> | 
| </body> | 
| <script> | 
|     // set default value | 
|     document.querySelector('#xmppServer').value  = xmppRoomConfig.url; | 
|     document.querySelector('#xmppRoom').value = xmppRoomConfig.roomId; | 
|          | 
|     // ------------------------------------------ | 
|     // XMPP connections | 
|     // ------------------------------------------     | 
|     var XMPPServerList = {}; | 
|      | 
|     function getText(url) { | 
|         var text; | 
|         if (url.video) { | 
|             text = url.video + " "; | 
|         } | 
|         if (url.audio) { | 
|             text += url.audio + " "; | 
|         } | 
|         return text; | 
|     }         | 
|     // ------------------------------------------ | 
|     // init device list  | 
|     // ------------------------------------------     | 
|     function onGetDeviceList(remoteDeviceList) { | 
|         var deviceList = []; | 
|         if (remoteDeviceList) { | 
|             deviceList.push.apply( deviceList, remoteDeviceList ); | 
|         } | 
|   | 
|         // create navigation menu | 
|         var urllist = document.getElementById("menu"); | 
|         for (var dev in deviceList) { | 
|             var url = deviceList[dev]; | 
|             var option = document.createElement("a"); | 
|             option.url = url; | 
|             option.text = getText(url); | 
|             option.id   = "nav_" + url.video; | 
|             option.onclick = function () {  | 
|                 if (this.className === "active") { | 
|                     disconnect(this.url.video);  | 
|                 } else { | 
|                     connect(this.url, this.url.video);  | 
|                 } | 
|             } | 
|             urllist.appendChild(option); | 
|         }         | 
|     }         | 
|     fetch(webrtcConfig.url + "/api/getMediaList").then(r => r.json()).then( (response) => {  | 
|         onGetDeviceList(response); | 
|     }); | 
|          | 
|     function onPresence (name, status) { | 
|         console.log("onPresence name:"+ name + " status:"+ status); | 
|         var videoId = name.split('/')[1]; | 
|         var navId = "nav_" + videoId; | 
|         var navElt = document.querySelector(`#${navId}`); | 
|         if (navElt) { | 
|             if (status == "out") { | 
|                 navElt.className = ""; | 
|             } else if (status == "in") { | 
|                 navElt.className = "active"; | 
|             } | 
|         } | 
|     }     | 
|   | 
|     var bus = new EventEmitter(); | 
|     bus.addListener('presence', onPresence); | 
|   | 
|     function getXMPPServer() { | 
|         var serverName = document.querySelector('#xmppServer').value; | 
|   | 
|         if (!XMPPServerList[serverName]) { | 
|             XMPPServerList[serverName] = new XMPPVideoRoom(serverName, webrtcConfig.url, bus); | 
|         } | 
|         var xmpp = XMPPServerList[serverName];     | 
|         return xmpp; | 
|     }     | 
|      | 
|     function connect(webrtcStream, xmppuser) {     | 
|         var roomName = document.querySelector('#xmppRoom').value;     | 
|         var xmpp = getXMPPServer(); | 
|         xmpp.join(roomName, webrtcStream, xmppuser); | 
|     } | 
|      | 
|     function disconnect(xmppuser) { | 
|         var roomName = document.querySelector('#xmppRoom').value;     | 
|         var xmpp = getXMPPServer(); | 
|         if (xmpp) { | 
|             xmpp.leave(roomName, xmppuser); | 
|         } | 
|     } | 
|      | 
|     function openroom() { | 
|         var serverName = document.querySelector('#xmppServer').value; | 
|         var roomName = document.querySelector('#xmppRoom').value;         | 
|         window.open( location.protocol + "//" + serverName + "/" + roomName); | 
|     } | 
|      | 
|     var roomName = document.querySelector('#xmppRoom').value;     | 
|     var xmpp = getXMPPServer(); | 
|     xmpp.query(roomName);         | 
|      | 
|     window.onbeforeunload = function() {  | 
|         console.log(Object.entries(XMPPServerList)) | 
|         Object.entries(XMPPServerList).forEach( ([serverName, xmpp]) => { | 
|             xmpp.leaveAll(); | 
|         }); | 
|     };         | 
| </script> | 
| </html> |