<html> 
 | 
<body>  
 | 
    AppRTC Url:<input id="server" type="text" size="50" /></br> 
 | 
     Room id:<input id="room" type="text" /></br> 
 | 
     WebRTC stream:<input id="rtcstream" type="text" size="50" value="rtsp://217.17.220.110/axis-media/media.amp" /></br> 
 | 
    <input type="button" value="connect" onclick="connect()" /> 
 | 
    <input type="button" value="disconnect" onclick="disconnect()" /> 
 | 
</body> 
 | 
<script src="libs/request.min.js"></script> 
 | 
<script src="apprtc.json" ></script> 
 | 
<script> 
 | 
    function sendRequest(request,method,headers,data,onSuccess,onFailure,scope) { 
 | 
  
 | 
        console.log("HTTP call "+ method); 
 | 
        var verb = "GET"; 
 | 
        if (data) { 
 | 
            verb = "POST"; 
 | 
            data = JSON.stringify(data); 
 | 
        } 
 | 
        request(verb , method, 
 | 
            {     
 | 
                body: data, 
 | 
                headers: headers 
 | 
            }).done( function (response) {  
 | 
                if (response.statusCode === 200) { 
 | 
                    if (onSuccess) { 
 | 
                        onSuccess.call(scope,JSON.parse(response.body)); 
 | 
                    } 
 | 
                } 
 | 
                else if (onFailure) { 
 | 
                    onFailure.call(scope,response.statusCode); 
 | 
                } 
 | 
            } 
 | 
        ); 
 | 
    } 
 | 
  
 | 
    // set default value 
 | 
    document.querySelector('#server').value  = apprtcConfig.url; 
 | 
    document.querySelector('#room').value = apprtcConfig.roomId; 
 | 
  
 | 
    var clientid = null; 
 | 
    var peerid = Math.random().toString(); 
 | 
    var messages = null; 
 | 
     
 | 
    function write(text) { 
 | 
        var textNode = document.createElement("li"); 
 | 
        textNode.textContent = text; 
 | 
        document.body.appendChild(textNode); 
 | 
    } 
 | 
     
 | 
    function onError (error) { 
 | 
        write("onError:" + error) 
 | 
    } 
 | 
     
 | 
    function onJoin(answer) { 
 | 
        write("onJoin result:" + answer.result) 
 | 
        if (answer.params.client_id) { 
 | 
            write("onJoin client_id:" + answer.params.client_id) 
 | 
            clientid = answer.params.client_id; 
 | 
                         
 | 
            messages = answer.params.messages;  
 | 
            for (var i=0; i < messages.length; i++) { 
 | 
                var msg = JSON.parse(messages[i]); 
 | 
                if (msg.type === "offer") { 
 | 
                    var webrtcStream = document.querySelector('#rtcstream').value; 
 | 
                    sendRequest(request, "/api/call?peerid="+ peerid+"&url="+encodeURIComponent(webrtcStream), null, msg, onCall, onError, this);          
 | 
                }                 
 | 
            }             
 | 
        } 
 | 
    } 
 | 
     
 | 
    function onGetIceCandidate(dataJson) { 
 | 
        write("onGetIceCandidate:" + JSON.stringify(dataJson)) 
 | 
         
 | 
        var serverName = document.querySelector('#server').value; 
 | 
        var roomName = document.querySelector('#room').value;         
 | 
  
 | 
        var candidates = []; 
 | 
        for (var i=0; i<dataJson.length; i++) { 
 | 
            // send ICE candidate to Janus 
 | 
            var msg = { "id": dataJson[i].sdpMid, "label": dataJson[i].sdpMLineIndex, "candidate": dataJson[i].candidate }; 
 | 
            candidates.push(msg); 
 | 
        } 
 | 
         
 | 
        var url = serverName + "/message/" + roomName + "/" + clientid; 
 | 
        var body = { messages: candidates }; 
 | 
        sendRequest(request, url, null, body, null , onError, this);      
 | 
    } 
 | 
     
 | 
    function onCall(sdp) { 
 | 
        write("onCall:" + JSON.stringify(sdp)) 
 | 
  
 | 
        var serverName = document.querySelector('#server').value; 
 | 
        var roomName = document.querySelector('#room').value; 
 | 
  
 | 
        var body = { messages: [ sdp ] }; 
 | 
        var url = serverName + "/message/" + roomName + "/" + clientid; 
 | 
        sendRequest(request, url, null, body, null , onError, this);      
 | 
  
 | 
  
 | 
        if (messages) { 
 | 
            for (var i=0; i < messages.length; i++) { 
 | 
                var msg = JSON.parse(messages[i]); 
 | 
                if (msg.type === "candidate") { 
 | 
                    var mymsg = { "sdpMid": msg.id, "sdpMLineIndex": msg.label, "candidate": msg.candidate }; 
 | 
                    sendRequest(request, "/api/addIceCandidate?peerid="+ peerid, null, mymsg, null, onError, this);          
 | 
                }                 
 | 
            } 
 | 
        } 
 | 
        sendRequest(request, "/api/getIceCandidate?peerid="+ peerid, null, null, onGetIceCandidate, onError, this);          
 | 
    } 
 | 
     
 | 
     
 | 
    function connect() {             
 | 
        var serverName = document.querySelector('#server').value; 
 | 
        var roomName = document.querySelector('#room').value; 
 | 
  
 | 
        var body = { messages: [""] }; 
 | 
        var url = serverName + "/join/" + roomName; 
 | 
        sendRequest(request, url, null, body, onJoin , onError, this);      
 | 
    } 
 | 
     
 | 
    function disconnect() { 
 | 
        var serverName = document.querySelector('#server').value; 
 | 
        var roomName = document.querySelector('#room').value; 
 | 
        if (clientid) { 
 | 
            var body = { messages: [] }; 
 | 
            var url = serverName + "/leave/" + roomName + "/" + clientid; 
 | 
            sendRequest(request, url, null, body, null , onError, this);  
 | 
        } 
 | 
    } 
 | 
     
 | 
    window.onbeforeunload = function() {  
 | 
        disconnect(); 
 | 
    };         
 | 
</script> 
 | 
</html> 
 |