aijinhui
2023-10-24 8a87e4226aa802d6a0e3566c66824fedf68e77da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<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>