UNPKG

open-easyrtc

Version:

Open-EasyRTC enables quick development of WebRTC

177 lines (147 loc) 5.97 kB
// //Copyright (c) 2016, Skedans Systems, Inc. //All rights reserved. // //Redistribution and use in source and binary forms, with or without //modification, are permitted provided that the following conditions are met: // // * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // //THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" //AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE //IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE //ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE //LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR //CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF //SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS //INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN //CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) //ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE //POSSIBILITY OF SUCH DAMAGE. // var selfEasyrtcid = ""; function disable(domId) { document.getElementById(domId).disabled = "disabled"; } function enable(domId) { document.getElementById(domId).disabled = ""; } function connect() { easyrtc.enableDebug(false); console.log("Initializing."); easyrtc.enableAudio(false); easyrtc.enableAudioReceive(false); easyrtc.setRoomOccupantListener(convertListToButtons); easyrtc.initMediaSource( function(){ // success callback var selfVideo = document.getElementById("selfVideo"); easyrtc.setVideoObjectSrc(selfVideo, easyrtc.getLocalStream()); easyrtc.connect("easyrtc.videoOnly", loginSuccess, loginFailure); }, function(errorCode, errmesg){ easyrtc.showError("MEDIA-ERROR", errmesg); } // failure callback ); } function terminatePage() { easyrtc.disconnect(); } function hangup() { easyrtc.hangupAll(); disable('hangupButton'); } function clearConnectList() { var otherClientDiv = document.getElementById('otherClients'); while (otherClientDiv.hasChildNodes()) { otherClientDiv.removeChild(otherClientDiv.lastChild); } } function convertListToButtons (roomName, occupants, isPrimary) { clearConnectList(); var otherClientDiv = document.getElementById('otherClients'); for(var easyrtcid in occupants) { var button = document.createElement('button'); button.onclick = function(easyrtcid) { return function() { performCall(easyrtcid); }; }(easyrtcid); var label = document.createTextNode( easyrtc.idToName(easyrtcid)); button.appendChild(label); otherClientDiv.appendChild(button); } if( !otherClientDiv.hasChildNodes() ) { otherClientDiv.innerHTML = "<em>Nobody else is on...</em>"; } } function performCall(otherEasyrtcid) { easyrtc.hangupAll(); var acceptedCB = function(accepted, easyrtcid) { if( !accepted ) { easyrtc.showError("CALL-REJECTED", "Sorry, your call to " + easyrtc.idToName(easyrtcid) + " was rejected"); enable('otherClients'); } }; var successCB = function() { enable('hangupButton'); }; var failureCB = function() { enable('otherClients'); }; easyrtc.call(otherEasyrtcid, successCB, failureCB, acceptedCB); } function loginSuccess(easyrtcid) { disable("connectButton"); // enable("disconnectButton"); enable('otherClients'); selfEasyrtcid = easyrtcid; document.getElementById("iam").innerHTML = "I am " + easyrtcid; } function loginFailure(errorCode, message) { easyrtc.showError(errorCode, message); } function disconnect() { document.getElementById("iam").innerHTML = "logged out"; easyrtc.disconnect(); console.log("disconnecting from server"); enable("connectButton"); // disable("disconnectButton"); clearConnectList(); easyrtc.setVideoObjectSrc(document.getElementById('selfVideo'), ""); } easyrtc.setStreamAcceptor( function(easyrtcid, stream) { var video = document.getElementById('callerVideo'); easyrtc.setVideoObjectSrc(video,stream); console.log("saw video from " + easyrtcid); enable("hangupButton"); }); easyrtc.setOnStreamClosed( function (easyrtcid) { easyrtc.setVideoObjectSrc(document.getElementById('callerVideo'), ""); disable("hangupButton"); }); easyrtc.setAcceptChecker(function(easyrtcid, callback) { document.getElementById('acceptCallBox').style.display = "block"; if( easyrtc.getConnectionCount() > 0 ) { document.getElementById('acceptCallLabel').innerHTML = "Drop current call and accept new from " + easyrtc.idToName(easyrtcid) + " ?"; } else { document.getElementById('acceptCallLabel').innerHTML = "Accept incoming call from " + easyrtc.idToName(easyrtcid) + " ?"; } var acceptTheCall = function(wasAccepted) { document.getElementById('acceptCallBox').style.display = "none"; if( wasAccepted && easyrtc.getConnectionCount() > 0 ) { easyrtc.hangupAll(); } callback(wasAccepted); }; document.getElementById("callAcceptButton").onclick = function() { acceptTheCall(true); }; document.getElementById("callRejectButton").onclick =function() { acceptTheCall(false); }; } );