angular.module("app").factory("Room",function(e,o,n,t){function c(o){if(g[o])return g[o];var n=new webkitRTCPeerConnection(p);return console.log("RTCPeerConnection object was created"),console.log(n),g[o]=n,console.log("Stream - "+u),n.addStream(u),n.onicecandidate=function(e){console.log("Ice candidate - "+angular.toJson(e)),R.emit("msg",{by:s,to:o,ice:e.candidate,type:"ice"})},n.onaddstream=function(n){console.log("Received new stream"),console.log("Stream Id"+o),console.log("Stream Details"+angular.toJson(n)),console.log("Stream URL"+n.stream),v.fire("peer.stream",[{id:o,stream:n.stream,userid:l,username:d,usertype:f}]),e.$$digest||e.$apply()},n}function i(e){var o=c(e);o.createOffer(function(n){o.setLocalDescription(n),console.log("Creating an offer for",e),R.emit("msg",{by:s,to:e,sdp:n,type:"sdp-offer"})},function(e){console.log(e)},{mandatory:{OfferToReceiveVideo:!0,OfferToReceiveAudio:!0}})}function r(e){var o=c(e.by);switch(e.type){case"sdp-offer":o.setRemoteDescription(new RTCSessionDescription(e.sdp),function(){console.log("Setting remote description by offer"),o.createAnswer(function(n){o.setLocalDescription(n),R.emit("msg",{by:s,to:e.by,sdp:n,type:"sdp-answer"})})});break;case"sdp-answer":o.setRemoteDescription(new RTCSessionDescription(e.sdp),function(){console.log("Setting remote description by answer")},function(e){console.error(e)});break;case"ice":e.ice&&(console.log("Adding ice candidates"),o.addIceCandidate(new RTCIceCandidate(e.ice)))}}var s,a,l,d,f,m,u,p={iceServers:[{url:"stun:stun.l.google.com:19302"}]},g={},R=n.connect("http://localhost:9001"),y=!1,v={joinRoom:function(e){y||(R.emit("init",{room:e},function(e,o){s=o,a=e,console.log("User Id - "+o),console.log("Room Id - "+e)}),y=!0)},createRoom:function(e){var n=o.defer();return R.emit("create",{room:e},function(e,o){n.resolve(e),a=e,s=o,y=!0,console.log("User Id - "+o),console.log("Room Id - "+e)}),n.promise},init:function(e,o,n,t,c){u=e,l=o,d=n,f=t,m=c},checkRoom:function(e){var n=o.defer();return R.emit("roomexists",{room:e},function(e){n.resolve(e),console.log("Room Exists - "+e)}),n.promise},leaveRoom:function(){R.emit("disconnect",null,function(e,o){console.log("Room Id closed - "+e)})}};return t.call(v),Object.setPrototypeOf(v,t.prototype),function(o){o.on("peer.connected",function(e){i(e.id)}),o.on("peer.disconnected",function(o){v.fire("peer.disconnected",[o]),e.$$digest||e.$apply()}),o.on("msg",function(e){r(e)})}(R),v});