made with requirebin
Created
July 22, 2014 06:43
-
-
Save cathylill/7c43f98e90b29a03f7ee to your computer and use it in GitHub Desktop.
requirebin sketch
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var quickconnect = require('rtc-quickconnect'); | |
var console = require('demo-console'); | |
quickconnect('http://rtc.io/switchboard/', { room: 'qc-simple-demo' }) | |
.on('call:started', function(id, pc, data) { | |
console.log('we have a new connection to: ' + id); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({R7XjId:[function(require,module,exports){"use strict";var reSpace=/\s/;var theme;var items;var themes={simple:'div.democonsole {\n position: absolute;\n bottom: 20px;\n left: 0px;\n z-index: 100;\n\n height: 30%;\n width: 100%;\n\n font-family: monospace;\n overflow-y: auto;\n}\n\ndiv.democonsole ul {\n margin: 0;\n padding: 6px;\n list-style-type: none;\n}\n\ndiv.democonsole ul li {\n padding-left: 14px;\n margin-bottom: 5px;\n display: flex;\n}\n\ndiv.democonsole ul li:before {\n color: #888;\n content: \'>\';\n font-weight: bold;\n position: absolute;\n margin-left: -14px;\n}\n\ndiv.democonsole ul li > * {\n margin-right: 8px;\n}\n\ndiv.democonsole ul li.error:before {\n content: \'!\';\n}\n\nspan[data-type=""] {\n font-weight: bold;\n}\n\nspan[data-type="number"], span[data-type="boolean"] {\n color: navy;\n}\n\nspan[data-type="string"] {\n color: green;\n white-space: pre;\n}\n\nspan[data-type="key"] {\n vertical-align: top;\n}\n\nspan[data-type="error"] {\n color: red;\n}\n\ndiv[data-type="object"] {\n display: inline-block;\n}\n\ndiv[data-type="object-key"] {\n margin-left: 20px;\n}\n\ndiv.comma-float {\n float: left;\n color: #222;\n}\n'};var log=exports.log=function(){var item=document.createElement("li");items=items||initConsole();theme=theme||initTheme();item.innerHTML=[].slice.call(arguments).map(renderData).join(" ");if(this&&this.class){item.classList.add(this.class)}items.appendChild(item);setTimeout(function(){items.parentNode.scrollTop=items.offsetHeight},100);window.console.log.apply(window.console,arguments)};exports.error=function(){log.apply({"class":"error"},arguments)};exports.useTheme=function(name){theme=initTheme(name)};function initConsole(){var container;var list=document.querySelector(".democonsole ul");if(list){return list}container=document.createElement("div");list=document.createElement("ul");container.className="democonsole";container.appendChild(list);document.body.appendChild(container);return list}function initTheme(theme){var stylesheet=document.getElementById("democonsole-theme");if(stylesheet){document.head.removeChild(stylesheet)}stylesheet=document.createElement("style");stylesheet.id="democonsole-theme";stylesheet.innerText=theme||themes.simple;document.head.appendChild(stylesheet);return stylesheet}function renderData(data,index){var initialItem=index===0;function extractData(key){var hasSpace=reSpace.test(key);var quoteChar=hasSpace?"'":"";return'<div data-type="object-key">'+span(quoteChar+key+quoteChar+": ","key")+renderData(data[key])+"</div>"}if(typeof data=="undefined"){return span("undefined","undefined")}if(data===true||data===false){return span(data,"boolean")}else if(Array.isArray(data)){return span("[")+data.map(function(entry){return renderData(entry)}).join(", ")+span("]")}else if(typeof data=="string"||data instanceof String){return span(initialItem?data:"'"+data+"'","string")}else if(data===null){return span("null","null")}else if(data instanceof Error){return span(data.toString(),"error")}else if(data instanceof Window){return span("window","window")}else if(data instanceof DocumentType){return"doctype: "+data.name}else if(data instanceof HTMLCollection){return span("[]","html-collection")}else if(data instanceof HTMLDocument){return[].slice.call(document.childNodes).map(renderData)}else if(data instanceof HTMLElement){return data.tagName}else if(typeof data=="object"){return'<div data-type="object">'+span("{")+Object.keys(data).map(extractData).join('<div class="comma-float">,</div>')+span("}")+"</div>"}else{return span(data,typeof data)}}function span(content,dataType){return'<span data-type="'+(dataType||"")+'">'+content+"</span>"}},{}],"demo-console":[function(require,module,exports){module.exports=require("R7XjId")},{}]},{},[]);require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){var process=module.exports={};process.nextTick=function(){var canSetImmediate=typeof window!=="undefined"&&window.setImmediate;var canPost=typeof window!=="undefined"&&window.postMessage&&window.addEventListener;if(canSetImmediate){return function(f){return window.setImmediate(f)}}if(canPost){var queue=[];window.addEventListener("message",function(ev){var source=ev.source;if((source===window||source===null)&&ev.data==="process-tick"){ev.stopPropagation();if(queue.length>0){var fn=queue.shift();fn()}}},true);return function nextTick(fn){queue.push(fn);window.postMessage("process-tick","*")}}return function nextTick(fn){setTimeout(fn,0)}}();process.title="browser";process.browser=true;process.env={};process.argv=[];function noop(){}process.on=noop;process.once=noop;process.off=noop;process.emit=noop;process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")}},{}],"rtc-quickconnect":[function(require,module,exports){module.exports=require("v4igVt")},{}],v4igVt:[function(require,module,exports){(function(process){"use strict";var rtc=require("rtc-tools");var cleanup=require("rtc-tools/cleanup");var debug=rtc.logger("rtc-quickconnect");var signaller=require("rtc-signaller");var defaults=require("cog/defaults");var extend=require("cog/extend");var getable=require("cog/getable");var reTrailingSlash=/\/$/;module.exports=function(signalhost,opts){var hash=typeof location!="undefined"&&location.hash.slice(1);var signaller=require("rtc-signaller")(signalhost,opts);var ns=(opts||{}).ns||"";var room=(opts||{}).room;var debugging=(opts||{}).debug;var profile={};var announced=false;var localStreams=[];var calls=signaller.calls=getable({});var channels={};function callCreate(id,pc,data){calls.set(id,{active:false,pc:pc,channels:getable({}),data:data,streams:[]})}function callEnd(id){var call=calls.get(id);if(!call){return}debug("ending call to: "+id);call.channels.keys().forEach(function(label){var channel=call.channels.get(label);var args=[id,channel,label];signaller.emit.apply(signaller,["channel:closed"].concat(args));signaller.emit.apply(signaller,["channel:closed:"+label].concat(args));channel.onopen=null});call.streams.forEach(function(stream){signaller.emit("stream:removed",id,stream)});calls.delete(id);signaller.emit("call:ended",id,call.pc);cleanup(call.pc)}function callStart(id,pc,data){var call=calls.get(id);var streams=[].concat(pc.getRemoteStreams());call.active=true;call.streams=[].concat(pc.getRemoteStreams());pc.onaddstream=createStreamAddHandler(id);pc.onremovestream=createStreamRemoveHandler(id);debug(signaller.id+" - "+id+" call start: "+streams.length+" streams");signaller.emit("call:started",id,pc,data);process.nextTick(function(){streams.forEach(receiveRemoteStream(id))})}function createStreamAddHandler(id){return function(evt){debug("peer "+id+" added stream");updateRemoteStreams(id);receiveRemoteStream(id)(evt.stream)}}function createStreamRemoveHandler(id){return function(evt){debug("peer "+id+" removed stream");updateRemoteStreams(id);signaller.emit("stream:removed",id,evt.stream)}}function getActiveCall(peerId){var call=calls.get(peerId);if(!call){throw new Error("No active call for peer: "+peerId)}return call}function gotPeerChannel(channel,pc,data){var channelMonitor;function channelReady(){var call=calls.get(data.id);var args=[data.id,channel,data,pc];debug('reporting channel "'+channel.label+'" ready, have call: '+!!call);clearInterval(channelMonitor);channel.onopen=null;if(call){call.channels.set(channel.label,channel)}debug("triggering channel:opened events for channel: "+channel.label);signaller.emit.apply(signaller,["channel:opened"].concat(args));signaller.emit.apply(signaller,["channel:opened:"+channel.label].concat(args))}debug("channel "+channel.label+" discovered for peer: "+data.id);if(channel.readyState==="open"){return channelReady()}debug("channel not ready, current state = "+channel.readyState);channel.onopen=channelReady;channelMonitor=setInterval(function(){debug("checking channel state, current state = "+channel.readyState);if(channel.readyState==="open"){channelReady()}},500)}function handleLocalAnnounce(data){if(data&&typeof data.room!="undefined"){room=data.room}}function handlePeerAnnounce(data){var pc;var monitor;if(data.room!==room){return}pc=rtc.createConnection(opts,(opts||{}).constraints);signaller.emit("peer:connect",data.id,pc,data);callCreate(data.id,pc,data);localStreams.forEach(function(stream,idx){pc.addStream(stream)});if(signaller.isMaster(data.id)){debug("is master, creating data channels: ",Object.keys(channels));Object.keys(channels).forEach(function(label){gotPeerChannel(pc.createDataChannel(label,channels[label]),pc,data)})}else{pc.ondatachannel=function(evt){var channel=evt&&evt.channel;if(!channel){return}if(channels[channel.label]!==undefined){gotPeerChannel(channel,pc,data)}}}debug("coupling "+signaller.id+" to "+data.id);monitor=rtc.couple(pc,data.id,signaller,opts);signaller.emit("peer:couple",data.id,pc,data,monitor);monitor.once("connected",callStart.bind(null,data.id,pc,data));monitor.once("closed",callEnd.bind(null,data.id));if(signaller.isMaster(data.id)){monitor.createOffer()}}function handlePeerUpdate(data){var id=data&&data.id;var activeCall=id&&calls.get(id);if(id&&!activeCall){debug("received peer update from peer "+id+", no active calls");return handlePeerAnnounce(data)}}function receiveRemoteStream(id){var call=calls.get(id);return function(stream){signaller.emit("stream:added",id,stream,call&&call.data)}}function updateRemoteStreams(id){var call=calls.get(id);if(call&&call.pc){call.streams=[].concat(call.pc.getRemoteStreams())}}if(!room){if(!hash){hash=location.hash=""+Math.pow(2,53)*Math.random()}room=ns+"#"+hash}if(debugging){rtc.logger.enable.apply(rtc.logger,Array.isArray(debug)?debugging:["*"])}signaller.on("peer:announce",handlePeerAnnounce);signaller.on("peer:update",handlePeerUpdate);signaller.on("peer:leave",callEnd);setTimeout(function(){var data=extend({},profile,{room:room});signaller.announce(data);announced=true},0);signaller.broadcast=signaller.addStream=function(stream){localStreams.push(stream);calls.values().forEach(function(data){data.pc.addStream(stream)});return signaller};signaller.endCalls=function(){calls.keys().forEach(callEnd)};signaller.close=function(){signaller.endCalls();signaller.leave()};signaller.createDataChannel=function(label,opts){calls.keys().forEach(function(peerId){var call=calls.get(peerId);var dc;if(call&&call.pc&&signaller.isMaster(peerId)){dc=call.pc.createDataChannel(label,opts);gotPeerChannel(dc,call.pc,call.data)}});channels[label]=opts||null;return signaller};signaller.reactive=function(){opts=opts||{};opts.reactive=true;return signaller};signaller.removeStream=function(stream){var localIndex=localStreams.indexOf(stream);calls.values().forEach(function(call){call.pc.removeStream(stream)});if(localIndex>=0){localStreams.splice(localIndex,1)}return signaller};signaller.requestChannel=function(targetId,label,callback){var call=getActiveCall(targetId);var channel=call&&call.channels.get(label);if(channel){callback(null,channel);return signaller}signaller.once("channel:opened:"+label,function(id,dc){callback(null,dc)});return signaller};signaller.requestStream=function(targetId,idx,callback){var call=getActiveCall(targetId);var stream;function waitForStream(peerId){if(peerId!==targetId){return}stream=call.pc.getRemoteStreams()[idx];if(stream){signaller.removeListener("stream:added",waitForStream);callback(null,stream)}}stream=call.pc.getRemoteStreams()[idx];if(stream){callback(null,stream);return signaller}signaller.on("stream:added",waitForStream);return signaller};signaller.profile=function(data){extend(profile,data);if(announced){signaller.announce(profile)}return signaller};signaller.waitForCall=function(targetId,callback){var call=calls.get(targetId);if(call&&call.active){callback(null,call.pc);return signaller}signaller.on("call:started",function handleNewCall(id){if(id===targetId){signaller.removeListener("call:started",handleNewCall);callback(null,calls.get(id).pc)}})};signaller.on("local:announce",handleLocalAnnounce);return signaller}}).call(this,require("/home/admin/browserify-cdn/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js"))},{"/home/admin/browserify-cdn/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":1,"cog/defaults":4,"cog/extend":5,"cog/getable":6,"rtc-signaller":13,"rtc-tools":27,"rtc-tools/cleanup":23}],4:[function(require,module,exports){"use strict";module.exports=function(target){target=target||{};[].slice.call(arguments,1).forEach(function(source){if(!source){return}for(var prop in source){if(target[prop]===void 0){target[prop]=source[prop]}}});return target}},{}],5:[function(require,module,exports){"use strict";module.exports=function(target){[].slice.call(arguments,1).forEach(function(source){if(!source){return}for(var prop in source){target[prop]=source[prop]}});return target}},{}],6:[function(require,module,exports){module.exports=function(target){function get(key){return target[key]}function set(key,value){target[key]=value}function remove(key){return delete target[key]}function keys(){return Object.keys(target)}function values(){return Object.keys(target).map(function(key){return target[key]})}if(typeof target!="object"){return target}return{get:get,set:set,remove:remove,"delete":remove,keys:keys,values:values}}},{}],7:[function(require,module,exports){"use strict";module.exports=function(input){var isString=typeof input=="string"||input instanceof String;var reNumeric=/^\-?\d+\.?\d*$/;var shouldParse;var firstChar;var lastChar;if(!isString||input.length<2){if(isString&&reNumeric.test(input)){return parseFloat(input)}return input}if(input==="true"||input==="false"){return input==="true"}if(input==="null"){return null}firstChar=input.charAt(0);lastChar=input.charAt(input.length-1);shouldParse=firstChar=="{"&&lastChar=="}"||firstChar=="["&&lastChar=="]"||firstChar=='"'&&lastChar=='"';if(shouldParse){try{return JSON.parse(input)}catch(e){}}return reNumeric.test(input)?parseFloat(input):input}},{}],8:[function(require,module,exports){"use strict";var active=[];var unleashListeners=[];var targets=[console];var logger=module.exports=function(name){var enabled=checkActive();function checkActive(){return enabled=active.indexOf("*")>=0||active.indexOf(name)>=0}unleashListeners[unleashListeners.length]=checkActive;return function(){var args=[].slice.call(arguments);if(typeof args[0]=="string"||args[0]instanceof String){args[0]=name+": "+args[0]}if(!enabled){return}targets.forEach(function(target){target.log.apply(target,args)})}};logger.reset=function(){targets=[];active=[];return logger.enable()};logger.to=function(target){targets=targets.concat(target||[]);return logger};logger.enable=function(){active=active.concat([].slice.call(arguments));unleashListeners.forEach(function(listener){listener()});return logger}},{}],9:[function(require,module,exports){"use strict";module.exports=function(fn,delay,opts){var lastExec=(opts||{}).leading!==false?0:Date.now();var trailing=(opts||{}).trailing;var timer;var queuedArgs;var queuedScope;trailing=trailing||trailing===undefined;function invokeDefered(){fn.apply(queuedScope,queuedArgs||[]);lastExec=Date.now()}return function(){var tick=Date.now();var elapsed=tick-lastExec;clearTimeout(timer);if(elapsed<delay){queuedArgs=[].slice.call(arguments,0);queuedScope=this;return trailing&&(timer=setTimeout(invokeDefered,delay-elapsed))}lastExec=tick;fn.apply(this,arguments)}}},{}],10:[function(require,module,exports){"use strict";var browser=require("detect-browser");var detect=module.exports=function(target,prefixes){var prefixIdx;var prefix;var testName;var hostObject=this||(typeof window!="undefined"?window:undefined);if(!hostObject){return}prefixes=(prefixes||["ms","o","moz","webkit"]).concat("");for(prefixIdx=prefixes.length;prefixIdx--;){prefix=prefixes[prefixIdx];testName=prefix+(prefix?target.charAt(0).toUpperCase()+target.slice(1):target);if(typeof hostObject[testName]!="undefined"){detect.browser=detect.browser||prefix.toLowerCase();return hostObject[target]=hostObject[testName]}}};detect.moz=typeof navigator!="undefined"&&!!navigator.mozGetUserMedia;detect.browser=browser.name;detect.browserVersion=detect.version=browser.version},{"detect-browser":11}],11:[function(require,module,exports){var browsers=[["chrome",/Chrom(?:e|ium)\/([0-9\.]+)(:?\s|$)/],["firefox",/Firefox\/([0-9\.]+)(?:\s|$)/],["opera",/Opera\/([0-9\.]+)(?:\s|$)/],["ie",/Trident\/7\.0.*rv\:([0-9\.]+)\).*Gecko$/],["ie",/MSIE\s([0-9\.]+);.*Trident\/[4-6].0/],["ie",/MSIE\s(7\.0)/],["bb10",/BB10;\sTouch.*Version\/([0-9\.]+)/],["android",/Android\s([0-9\.]+)/],["ios",/iPad\;\sCPU\sOS\s([0-9\._]+)/],["ios",/iPhone\;\sCPU\siPhone\sOS\s([0-9\._]+)/]];var match=browsers.map(match).filter(isMatch)[0];var parts=match&&match[3].split(/[._]/).slice(0,3);while(parts&&parts.length<3){parts.push("0")}exports.name=match&&match[0];exports.version=parts&&parts.join(".");function match(pair){return pair.concat(pair[1].exec(navigator.userAgent))}function isMatch(pair){return!!pair[2]}},{}],12:[function(require,module,exports){var detect=require("./detect");var requiredFunctions=["init"];function isSupported(plugin){return plugin&&typeof plugin.supported=="function"&&plugin.supported(detect)}function isValid(plugin){var supportedFunctions=requiredFunctions.filter(function(fn){return typeof plugin[fn]=="function"});return supportedFunctions.length===requiredFunctions.length}module.exports=function(plugins){return[].concat(plugins||[]).filter(isSupported).filter(isValid)[0]}},{"./detect":10}],13:[function(require,module,exports){var extend=require("cog/extend");module.exports=function(messenger,opts){return require("./index.js")(messenger,extend({connect:require("./primus-loader")},opts))}},{"./index.js":18,"./primus-loader":20,"cog/extend":5}],14:[function(require,module,exports){module.exports={dataEvent:"data",openEvent:"open",closeEvent:"close",writeMethod:"write",closeMethod:"close",leaveTimeout:3e3}},{}],15:[function(require,module,exports){"use strict";var debug=require("cog/logger")("rtc-signaller");var extend=require("cog/extend");var roles=["a","b"];module.exports=function(signaller){function copyData(target,source){if(target&&source){for(var key in source){target[key]=source[key]}}return target}function dataAllowed(data){var evt={data:data,allow:true};signaller.emit("peer:filter",evt);return evt.allow}return function(args,messageType,srcData,srcState,isDM){var data=args[0];var peer;debug("announce handler invoked, received data: ",data);if(data&&data.id&&data.id!==signaller.id){if(!dataAllowed(data)){return}peer=signaller.peers.get(data.id);signaller.emit("peer:connected",data.id,data);if(peer&&!peer.inactive){debug("signaller: "+signaller.id+" received update, data: ",data);copyData(peer.data,data);return signaller.emit("peer:update",data,srcData)}peer={id:data.id,roleIdx:[data.id,signaller.id].sort().indexOf(data.id),data:{}};copyData(peer.data,data);clearTimeout(peer.leaveTimer);peer.inactive=false;signaller.peers.set(data.id,peer);if(signaller.autoreply&&!isDM){signaller.to(data.id).send("/announce",signaller.attributes)}return signaller.emit("peer:announce",data,peer)}}}},{"cog/extend":5,"cog/logger":8}],16:[function(require,module,exports){"use strict";module.exports=function(signaller,opts){return{announce:require("./announce")(signaller,opts),leave:require("./leave")(signaller,opts)}}},{"./announce":15,"./leave":17}],17:[function(require,module,exports){"use strict";module.exports=function(signaller,opts){return function(args){var data=args[0];var peer=signaller.peers.get(data&&data.id);if(peer){peer.leaveTimer=setTimeout(function(){peer.inactive=true;signaller.emit("peer:leave",data.id,peer)},opts.leaveTimeout)}signaller.emit("peer:disconnected",data.id,peer)}}},{}],18:[function(require,module,exports){"use strict";var debug=require("cog/logger")("rtc-signaller");var detect=require("rtc-core/detect");var EventEmitter=require("eventemitter3");var defaults=require("cog/defaults");var extend=require("cog/extend");var throttle=require("cog/throttle");var getable=require("cog/getable");var uuid=require("./uuid");var WRITE_METHODS=["write","send"];var CLOSE_METHODS=["close","end"];var metadata={version:"2.4.0"};module.exports=function(messenger,opts){var autoreply=(opts||{}).autoreply;var connect=(opts||{}).connect;var localMeta={};var signaller=new EventEmitter;var id=signaller.id=(opts||{}).id||uuid();var attributes=signaller.attributes={browser:detect.browser,browserVersion:detect.browserVersion,id:id,agent:"signaller@"+metadata.version};var peers=signaller.peers=getable({});var connected=false;var write;var close;var processor;var announceTimer=0;function announceOnReconnect(){signaller.announce()}function bindBrowserEvents(){messenger.addEventListener("message",function(evt){processor(evt.data)});messenger.addEventListener("open",function(evt){connected=true;signaller.emit("open");signaller.emit("connected")});messenger.addEventListener("close",function(evt){connected=false;signaller.emit("disconnected")})}function bindEvents(){if(typeof messenger.on!="function"){return}messenger.on(opts.dataEvent,processor);messenger.on(opts.openEvent,function(){connected=true;signaller.emit("open");signaller.emit("connected")});messenger.on(opts.closeEvent,function(){connected=false;signaller.emit("disconnected")})}function connectToHost(url){if(typeof connect!="function"){return signaller.emit("error",new Error("no connect function"))}connect(url,function(err,socket){if(err){return signaller.emit("error",err)}signaller._messenger=messenger=socket.connect(url);init()})}function createDataLine(args){return args.map(prepareArg).join("|")}function createMetadata(){return extend({},localMeta,{id:signaller.id})}function extractProp(name){return messenger[name]}function isClosing(){var isAbstraction=messenger&&typeof messenger.socket!="undefined";return isAbstraction?false:messenger&&typeof messenger.readyState!="undefined"&&messenger.readyState>=2}function isF(target){return typeof target=="function"}function init(){write=[opts.writeMethod].concat(WRITE_METHODS).map(extractProp).filter(isF)[0];close=[opts.closeMethod].concat(CLOSE_METHODS).map(extractProp).filter(isF)[0];signaller.process=processor=require("./processor")(signaller,opts);if(typeof write!="function"){throw new Error('provided messenger does not implement a "'+writeMethod+'" write method')}if(typeof messenger.addEventListener=="function"){bindBrowserEvents()}else{bindEvents()}connected=messenger.connected||false;if(!connected){signaller.once("connected",function(){signaller.on("connected",announceOnReconnect)})}setTimeout(signaller.emit.bind(signaller,"init"),0)}function prepareArg(arg){if(typeof arg=="object"&&!(arg instanceof String)){return JSON.stringify(arg)}else if(typeof arg=="function"){return null}return arg}var send=signaller.send=function(){var args=[].slice.call(arguments);var dataline;args.splice(1,0,createMetadata());dataline=createDataLine(args);if(isClosing()){return}if(!connected){return signaller.once("connected",function(){write.call(messenger,dataline)})}return write.call(messenger,dataline)};signaller.announce=function(data,sender){function sendAnnounce(){(sender||send)("/announce",attributes);signaller.emit("local:announce",attributes)}clearTimeout(announceTimer);extend(attributes,data,{id:signaller.id});if(connected){signaller.removeListener("connected",announceOnReconnect);signaller.on("connected",announceOnReconnect)}return announceTimer=setTimeout(function(){if(!connected){return signaller.once("connected",sendAnnounce)}sendAnnounce()},(opts||{}).announceDelay||10)};signaller.isMaster=function(targetId){var peer=peers.get(targetId);return peer&&peer.roleIdx!==0};signaller.leave=signaller.close=function(){send("/leave",{id:id});signaller.removeListener("connected",announceOnReconnect);if(typeof close=="function"){close.call(messenger)}};signaller.metadata=function(data){if(arguments.length===0){return extend({},localMeta)}localMeta=extend({},data)};signaller.to=function(targetId){var sender=function(){var peer=signaller.peers.get(targetId);var args;if(!peer){throw new Error("Unknown peer: "+targetId)}if(peer.inactive){return}args=["/to",targetId].concat([].slice.call(arguments));args.splice(3,0,createMetadata());setTimeout(function(){var msg=createDataLine(args);debug("TX ("+targetId+"): "+msg);write.call(messenger,msg)},0)};return{announce:function(data){return signaller.announce(data,sender)},send:sender}};signaller.setMaxListeners(0);opts=defaults({},opts,require("./defaults"));signaller.autoreply=autoreply===undefined||autoreply;if(typeof messenger=="string"||messenger instanceof String){connectToHost(messenger)}else{init()}signaller._messenger=messenger;signaller.process=processor;return signaller}},{"./defaults":14,"./processor":21,"./uuid":22,"cog/defaults":4,"cog/extend":5,"cog/getable":6,"cog/logger":8,"cog/throttle":9,eventemitter3:19,"rtc-core/detect":10}],19:[function(require,module,exports){"use strict";function EventEmitter(){this._events={}}EventEmitter.prototype.listeners=function listeners(event){return Array.apply(this,this._events[event]||[])};EventEmitter.prototype.emit=function emit(event,a1,a2,a3,a4,a5){if(!this._events||!this._events[event])return false;var listeners=this._events[event],length=listeners.length,len=arguments.length,fn=listeners[0],args,i;if(1===length){if(fn.__EE3_once)this.removeListener(event,fn);switch(len){case 1:fn.call(fn.__EE3_context||this);break;case 2:fn.call(fn.__EE3_context||this,a1);break;case 3:fn.call(fn.__EE3_context||this,a1,a2);break;case 4:fn.call(fn.__EE3_context||this,a1,a2,a3);break;case 5:fn.call(fn.__EE3_context||this,a1,a2,a3,a4);break;case 6:fn.call(fn.__EE3_context||this,a1,a2,a3,a4,a5);break;default:for(i=1,args=new Array(len-1);i<len;i++){args[i-1]=arguments[i]}fn.apply(fn.__EE3_context||this,args)}}else{for(i=1,args=new Array(len-1);i<len;i++){args[i-1]=arguments[i]}for(i=0;i<length;fn=listeners[++i]){if(fn.__EE3_once)this.removeListener(event,fn);fn.apply(fn.__EE3_context||this,args)}}return true};EventEmitter.prototype.on=function on(event,fn,context){if(!this._events)this._events={};if(!this._events[event])this._events[event]=[];fn.__EE3_context=context;this._events[event].push(fn);return this};EventEmitter.prototype.once=function once(event,fn,context){fn.__EE3_once=true;return this.on(event,fn,context)};EventEmitter.prototype.removeListener=function removeListener(event,fn){if(!this._events||!this._events[event])return this;var listeners=this._events[event],events=[];for(var i=0,length=listeners.length;i<length;i++){if(fn&&listeners[i]!==fn){events.push(listeners[i])}}if(events.length)this._events[event]=events;else this._events[event]=null;return this};EventEmitter.prototype.removeAllListeners=function removeAllListeners(event){if(!this._events)return this;if(event)this._events[event]=null;else this._events={};return this};EventEmitter.prototype.off=EventEmitter.prototype.removeListener;EventEmitter.prototype.addListener=EventEmitter.prototype.on;EventEmitter.prototype.setMaxListeners=function setMaxListeners(){return this};EventEmitter.EventEmitter=EventEmitter;EventEmitter.EventEmitter2=EventEmitter;EventEmitter.EventEmitter3=EventEmitter;try{module.exports=EventEmitter}catch(e){}},{}],20:[function(require,module,exports){"use strict";var reTrailingSlash=/\/$/;module.exports=function(signalhost,callback){var anchor=document.createElement("a");var script;var baseUrl;var scriptSrc;if(typeof signalhost=="function"){callback=signalhost;signalhost=location.origin}anchor.href=signalhost;baseUrl=signalhost.replace(reTrailingSlash,"");scriptSrc=baseUrl+"/rtc.io/primus.js";script=document.querySelector('script[src="'+scriptSrc+'"]');if(script&&typeof Primus!="undefined"){return callback(null,Primus)}else if(script){script.addEventListener("load",function(){callback(null,Primus)});return}script=document.createElement("script");script.src=scriptSrc;script.onerror=callback;script.addEventListener("load",function(){if(anchor.pathname!=="/"){Primus.prototype.pathname=anchor.pathname.replace(reTrailingSlash,"")+Primus.prototype.pathname}callback(null,Primus)});document.body.appendChild(script)}},{}],21:[function(require,module,exports){"use strict";var debug=require("cog/logger")("rtc-signaller");var jsonparse=require("cog/jsonparse");module.exports=function(signaller,opts){var handlers=require("./handlers")(signaller,opts);function sendEvent(parts,srcState,data){var evtName=parts[0].slice(1);var args=parts.slice(2).map(jsonparse);signaller.emit.apply(signaller,[evtName].concat(args).concat([srcState,data]))}return function(originalData){var data=originalData;var isMatch=true;var parts;var handler;var srcData;var srcState;var isDirectMessage=false;var id=signaller.id+"";debug("signaller "+id+" received data: "+originalData);if(data.slice(0,3)==="/to"){isMatch=data.slice(4,id.length+4)===id;if(isMatch){parts=data.slice(5+id.length).split("|").map(jsonparse);isDirectMessage=true;parts=parts.map(jsonparse)}}if(!isMatch){return}parts=parts||data.split("|").map(jsonparse);if(typeof parts[0]=="string"){srcData=parts[1];if(srcData&&srcData.id===signaller.id){return console.warn("got data from ourself, discarding")}srcState=signaller.peers.get(srcData&&srcData.id)||srcData;if(parts[0].charAt(0)==="/"){handler=handlers[parts[0].slice(1)];if(typeof handler=="function"){handler(parts.slice(2),parts[0].slice(1),srcData,srcState,isDirectMessage)}else{sendEvent(parts,srcState,originalData)}}else{signaller.emit("data",parts.slice(0,1).concat(parts.slice(2)),srcData,srcState,isDirectMessage)}}}}},{"./handlers":16,"cog/jsonparse":7,"cog/logger":8}],22:[function(require,module,exports){module.exports=function(a,b){for(b=a="";a++<36;b+=a*51&52?(a^15?8^Math.random()*(a^20?16:4):4).toString(16):"-");return b}},{}],23:[function(require,module,exports){"use strict";var debug=require("cog/logger")("rtc/cleanup");var CANNOT_CLOSE_STATES=["closed"];var EVENTS_DECOUPLE_BC=["addstream","datachannel","icecandidate","negotiationneeded","removestream","signalingstatechange"];var EVENTS_DECOUPLE_AC=["iceconnectionstatechange"];module.exports=function(pc){var currentState=pc.iceConnectionState;var canClose=CANNOT_CLOSE_STATES.indexOf(currentState)<0;function decouple(events){events.forEach(function(evtName){if(pc["on"+evtName]){pc["on"+evtName]=null}})}decouple(EVENTS_DECOUPLE_BC);if(canClose){debug("attempting connection close, current state: "+pc.iceConnectionState);pc.close()}setTimeout(function(){decouple(EVENTS_DECOUPLE_AC)},100)}},{"cog/logger":8}],24:[function(require,module,exports){"use strict";var async=require("async");var cleanup=require("./cleanup");var monitor=require("./monitor");var detect=require("./detect");var findPlugin=require("rtc-core/plugin");var CLOSED_STATES=["closed","failed"];var OFFER_ANSWER_CONSTRAINTS=["offerToReceiveVideo","offerToReceiveAudio","voiceActivityDetection","iceRestart"];function couple(pc,targetId,signaller,opts){var debugLabel=(opts||{}).debugLabel||"rtc";var debug=require("cog/logger")(debugLabel+"/couple");var mon=monitor(pc,targetId,signaller,opts); | |
var queuedCandidates=[];var sdpFilter=(opts||{}).sdpfilter;var reactive=(opts||{}).reactive;var offerTimeout;var endOfCandidates=true;var plugin=findPlugin((opts||{}).plugins);var disconnectTimeout=(opts||{}).disconnectTimeout||1e4;var disconnectTimer;if(typeof signaller.isMaster!="function"){throw new Error("rtc-signaller instance >= 0.14.0 required")}var isMaster=signaller.isMaster(targetId);var createOffer=prepNegotiate("createOffer",isMaster,[checkStable]);var createAnswer=prepNegotiate("createAnswer",true,[]);var q=async.queue(function(task,cb){if(typeof task.op!="function"){return cb()}task.op(task,cb)},1);var RTCSessionDescription=(opts||{}).RTCSessionDescription||detect("RTCSessionDescription");var RTCIceCandidate=(opts||{}).RTCIceCandidate||detect("RTCIceCandidate");function abort(stage,sdp,cb){return function(err){console.error("rtc/couple error ("+stage+"): ",err);if(typeof cb=="function"){cb(err)}}}function applyCandidatesWhenStable(){if(pc.signalingState=="stable"&&pc.remoteDescription){debug("signaling state = stable, applying queued candidates");mon.removeListener("change",applyCandidatesWhenStable);queuedCandidates.splice(0).forEach(function(data){debug("applying queued candidate",data);try{pc.addIceCandidate(createIceCandidate(data))}catch(e){debug("invalidate candidate specified: ",data)}})}}function checkNotConnecting(negotiate){if(pc.iceConnectionState!="checking"){return true}debug("connection state is checking, will wait to create a new offer");mon.once("connected",function(){q.push({op:negotiate})});return false}function checkStable(negotiate){if(pc.signalingState==="stable"){return true}debug("cannot create offer, signaling state != stable, will retry");mon.on("change",function waitForStable(){if(pc.signalingState==="stable"){q.push({op:negotiate})}mon.removeListener("change",waitForStable)});return false}function createIceCandidate(data){if(plugin&&typeof plugin.createIceCandidate=="function"){return plugin.createIceCandidate(data)}return new RTCIceCandidate(data)}function createSessionDescription(data){if(plugin&&typeof plugin.createSessionDescription=="function"){return plugin.createSessionDescription(data)}return new RTCSessionDescription(data)}function decouple(){debug("decoupling "+signaller.id+" from "+targetId);mon.removeAllListeners();mon.stop();cleanup(pc);signaller.removeListener("sdp",handleSdp);signaller.removeListener("candidate",handleRemoteCandidate);signaller.removeListener("negotiate",handleNegotiateRequest)}function generateConstraints(methodName){var constraints={};function reformatConstraints(){var tweaked={};Object.keys(constraints).forEach(function(param){var sentencedCased=param.charAt(0).toUpperCase()+param.substr(1);tweaked[sentencedCased]=constraints[param]});constraints={mandatory:tweaked}}OFFER_ANSWER_CONSTRAINTS.forEach(function(param){var sentencedCased=param.charAt(0).toUpperCase()+param.substr(1);if(!opts){return}else if(opts[param]!==undefined){constraints[param]=opts[param]}else if(opts[sentencedCased]!==undefined){constraints[param]=opts[sentencedCased]}});reformatConstraints();return constraints}function prepNegotiate(methodName,allowed,preflightChecks){var constraints=generateConstraints(methodName);preflightChecks=[].concat(preflightChecks||[]);return function negotiate(task,cb){var checksOK=true;if(!allowed){signaller.to(targetId).send("/negotiate");return cb()}if(isClosed()){return cb(new Error("connection closed, cannot negotiate"))}preflightChecks.forEach(function(check){checksOK=checksOK&&check(negotiate)});if(!checksOK){debug("preflight checks did not pass, aborting "+methodName);return cb()}debug("calling "+methodName);pc[methodName](function(desc){if(typeof sdpFilter=="function"){desc.sdp=sdpFilter(desc.sdp,pc,methodName)}q.push({op:queueLocalDesc(desc)});cb()},abort(methodName,"",cb),constraints)}}function handleConnectionClose(){debug("captured pc close, iceConnectionState = "+pc.iceConnectionState);decouple()}function handleDisconnect(){debug("captured pc disconnect, monitoring connection status");disconnectTimer=setTimeout(function(){debug("manually closing connection after disconnect timeout");pc.close()},disconnectTimeout);mon.on("change",handleDisconnectAbort)}function handleDisconnectAbort(){debug("connection state changed to: "+pc.iceConnectionState);resetDisconnectTimer();if(CLOSED_STATES.indexOf(pc.iceConnectionState)>=0){return mon.emit("closed")}mon.once("disconnect",handleDisconnect)}function handleLocalCandidate(evt){if(evt.candidate){resetDisconnectTimer();signaller.to(targetId).send("/candidate",evt.candidate);endOfCandidates=false}else if(!endOfCandidates){endOfCandidates=true;debug("ice gathering state complete");signaller.to(targetId).send("/endofcandidates",{})}}function handleNegotiateRequest(src){if(src.id===targetId){debug("got negotiate request from "+targetId+", creating offer");q.push({op:createOffer})}}function handleRemoteCandidate(data,src){if(!src||src.id!==targetId){return}if(pc.signalingState!="stable"||!pc.remoteDescription){debug("queuing candidate");queuedCandidates.push(data);mon.removeListener("change",applyCandidatesWhenStable);mon.on("change",applyCandidatesWhenStable);return}try{pc.addIceCandidate(createIceCandidate(data))}catch(e){debug("invalidate candidate specified: ",data)}}function handleSdp(data,src){var abortType=data.type==="offer"?"createAnswer":"createOffer";if(!src||src.id!==targetId){return debug("received sdp but dropping due to unmatched src")}q.push({op:function(task,cb){if(isClosed()){return cb(new Error("pc closed: cannot set remote description"))}debug("setting remote description");pc.setRemoteDescription(createSessionDescription(data),function(){if(data.type==="offer"){queue(createAnswer)()}cb()},abort(abortType,data.sdp,cb))}})}function isClosed(){return CLOSED_STATES.indexOf(pc.iceConnectionState)>=0}function queue(negotiateTask){return function(){q.push([{op:negotiateTask}])}}function queueLocalDesc(desc){return function setLocalDesc(task,cb){if(isClosed()){return cb(new Error("connection closed, aborting"))}debug("setting local description");pc.setLocalDescription(desc,function(){signaller.to(targetId).send("/sdp",desc);cb()},function(err){debug("error setting local description",err);debug(desc.sdp);cb(err)})}}function resetDisconnectTimer(){mon.removeListener("change",handleDisconnectAbort);debug("reset disconnect timer, state: "+pc.iceConnectionState);clearTimeout(disconnectTimer)}if(reactive){pc.onnegotiationneeded=function(){debug("renegotiation required, will create offer in 50ms");clearTimeout(offerTimeout);offerTimeout=setTimeout(queue(createOffer),50)}}pc.onicecandidate=handleLocalCandidate;signaller.on("sdp",handleSdp);signaller.on("candidate",handleRemoteCandidate);if(isMaster){signaller.on("negotiate",handleNegotiateRequest)}mon.once("closed",handleConnectionClose);mon.once("disconnected",handleDisconnect);mon.createOffer=queue(createOffer);return mon}module.exports=couple},{"./cleanup":23,"./detect":25,"./monitor":28,async:29,"cog/logger":8,"rtc-core/plugin":12}],25:[function(require,module,exports){"use strict";module.exports=require("rtc-core/detect")},{"rtc-core/detect":10}],26:[function(require,module,exports){"use strict";var debug=require("cog/logger")("generators");var detect=require("./detect");var defaults=require("cog/defaults");var mappings={create:{dtls:function(c){if(!detect.moz){c.optional=(c.optional||[]).concat({DtlsSrtpKeyAgreement:true})}}}};exports.config=function(config){return defaults(config,{iceServers:[]})};exports.connectionConstraints=function(flags,constraints){var generated={};var m=mappings.create;var out;Object.keys(flags||{}).forEach(function(key){if(m[key]){m[key](generated)}});out=defaults({},constraints,generated);debug("generated connection constraints: ",out);return out}},{"./detect":25,"cog/defaults":4,"cog/logger":8}],27:[function(require,module,exports){"use strict";var gen=require("./generators");var detect=exports.detect=require("./detect");var findPlugin=require("rtc-core/plugin");exports.logger=require("cog/logger");var RTCPeerConnection=exports.RTCPeerConnection=detect("RTCPeerConnection");exports.couple=require("./couple");exports.createConnection=function(opts,constraints){var plugin=findPlugin((opts||{}).plugins);var normalize=(plugin?plugin.normalizeIce:null)||require("normalice");var config=gen.config(opts);var constraints=gen.connectionConstraints(opts,constraints);config.iceServers=(config.iceServers||[]).map(normalize);if(plugin&&typeof plugin.createConnection=="function"){return plugin.createConnection(config,constraints)}else{return new((opts||{}).RTCPeerConnection||RTCPeerConnection)(config,constraints)}}},{"./couple":24,"./detect":25,"./generators":26,"cog/logger":8,normalice:31,"rtc-core/plugin":12}],28:[function(require,module,exports){"use strict";var EventEmitter=require("eventemitter3");var stateMappings={completed:"connected"};var peerStateEvents=["signalingstatechange","iceconnectionstatechange"];module.exports=function(pc,targetId,signaller,opts){var debugLabel=(opts||{}).debugLabel||"rtc";var debug=require("cog/logger")(debugLabel+"/monitor");var monitor=new EventEmitter;var state;function checkState(){var newState=getMappedState(pc.iceConnectionState);debug("state changed: "+pc.iceConnectionState+", mapped: "+newState);monitor.emit("change",pc);if(state!==newState){monitor.emit(newState);state=newState}}function handlePeerLeave(peerId){debug("captured peer leave for peer: "+peerId);if(peerId!==targetId){return}monitor.emit("closed")}pc.onclose=monitor.emit.bind(monitor,"closed");peerStateEvents.forEach(function(evtName){pc["on"+evtName]=checkState});monitor.stop=function(){pc.onclose=null;peerStateEvents.forEach(function(evtName){pc["on"+evtName]=null});if(signaller&&typeof signaller.removeListener=="function"){signaller.removeListener("peer:leave",handlePeerLeave)}};monitor.checkState=checkState;if(!pc){return monitor}state=getMappedState(pc.iceConnectionState);if(signaller&&typeof signaller.on=="function"){signaller.on("peer:leave",handlePeerLeave)}return monitor};function getMappedState(state){return stateMappings[state]||state}},{"cog/logger":8,eventemitter3:30}],29:[function(require,module,exports){(function(process){(function(){var async={};var root,previous_async;root=this;if(root!=null){previous_async=root.async}async.noConflict=function(){root.async=previous_async;return async};function only_once(fn){var called=false;return function(){if(called)throw new Error("Callback was already called.");called=true;fn.apply(root,arguments)}}var _toString=Object.prototype.toString;var _isArray=Array.isArray||function(obj){return _toString.call(obj)==="[object Array]"};var _each=function(arr,iterator){if(arr.forEach){return arr.forEach(iterator)}for(var i=0;i<arr.length;i+=1){iterator(arr[i],i,arr)}};var _map=function(arr,iterator){if(arr.map){return arr.map(iterator)}var results=[];_each(arr,function(x,i,a){results.push(iterator(x,i,a))});return results};var _reduce=function(arr,iterator,memo){if(arr.reduce){return arr.reduce(iterator,memo)}_each(arr,function(x,i,a){memo=iterator(memo,x,i,a)});return memo};var _keys=function(obj){if(Object.keys){return Object.keys(obj)}var keys=[];for(var k in obj){if(obj.hasOwnProperty(k)){keys.push(k)}}return keys};if(typeof process==="undefined"||!process.nextTick){if(typeof setImmediate==="function"){async.nextTick=function(fn){setImmediate(fn)};async.setImmediate=async.nextTick}else{async.nextTick=function(fn){setTimeout(fn,0)};async.setImmediate=async.nextTick}}else{async.nextTick=process.nextTick;if(typeof setImmediate!=="undefined"){async.setImmediate=function(fn){setImmediate(fn)}}else{async.setImmediate=async.nextTick}}async.each=function(arr,iterator,callback){callback=callback||function(){};if(!arr.length){return callback()}var completed=0;_each(arr,function(x){iterator(x,only_once(done))});function done(err){if(err){callback(err);callback=function(){}}else{completed+=1;if(completed>=arr.length){callback()}}}};async.forEach=async.each;async.eachSeries=function(arr,iterator,callback){callback=callback||function(){};if(!arr.length){return callback()}var completed=0;var iterate=function(){iterator(arr[completed],function(err){if(err){callback(err);callback=function(){}}else{completed+=1;if(completed>=arr.length){callback()}else{iterate()}}})};iterate()};async.forEachSeries=async.eachSeries;async.eachLimit=function(arr,limit,iterator,callback){var fn=_eachLimit(limit);fn.apply(null,[arr,iterator,callback])};async.forEachLimit=async.eachLimit;var _eachLimit=function(limit){return function(arr,iterator,callback){callback=callback||function(){};if(!arr.length||limit<=0){return callback()}var completed=0;var started=0;var running=0;(function replenish(){if(completed>=arr.length){return callback()}while(running<limit&&started<arr.length){started+=1;running+=1;iterator(arr[started-1],function(err){if(err){callback(err);callback=function(){}}else{completed+=1;running-=1;if(completed>=arr.length){callback()}else{replenish()}}})}})()}};var doParallel=function(fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[async.each].concat(args))}};var doParallelLimit=function(limit,fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[_eachLimit(limit)].concat(args))}};var doSeries=function(fn){return function(){var args=Array.prototype.slice.call(arguments);return fn.apply(null,[async.eachSeries].concat(args))}};var _asyncMap=function(eachfn,arr,iterator,callback){arr=_map(arr,function(x,i){return{index:i,value:x}});if(!callback){eachfn(arr,function(x,callback){iterator(x.value,function(err){callback(err)})})}else{var results=[];eachfn(arr,function(x,callback){iterator(x.value,function(err,v){results[x.index]=v;callback(err)})},function(err){callback(err,results)})}};async.map=doParallel(_asyncMap);async.mapSeries=doSeries(_asyncMap);async.mapLimit=function(arr,limit,iterator,callback){return _mapLimit(limit)(arr,iterator,callback)};var _mapLimit=function(limit){return doParallelLimit(limit,_asyncMap)};async.reduce=function(arr,memo,iterator,callback){async.eachSeries(arr,function(x,callback){iterator(memo,x,function(err,v){memo=v;callback(err)})},function(err){callback(err,memo)})};async.inject=async.reduce;async.foldl=async.reduce;async.reduceRight=function(arr,memo,iterator,callback){var reversed=_map(arr,function(x){return x}).reverse();async.reduce(reversed,memo,iterator,callback)};async.foldr=async.reduceRight;var _filter=function(eachfn,arr,iterator,callback){var results=[];arr=_map(arr,function(x,i){return{index:i,value:x}});eachfn(arr,function(x,callback){iterator(x.value,function(v){if(v){results.push(x)}callback()})},function(err){callback(_map(results.sort(function(a,b){return a.index-b.index}),function(x){return x.value}))})};async.filter=doParallel(_filter);async.filterSeries=doSeries(_filter);async.select=async.filter;async.selectSeries=async.filterSeries;var _reject=function(eachfn,arr,iterator,callback){var results=[];arr=_map(arr,function(x,i){return{index:i,value:x}});eachfn(arr,function(x,callback){iterator(x.value,function(v){if(!v){results.push(x)}callback()})},function(err){callback(_map(results.sort(function(a,b){return a.index-b.index}),function(x){return x.value}))})};async.reject=doParallel(_reject);async.rejectSeries=doSeries(_reject);var _detect=function(eachfn,arr,iterator,main_callback){eachfn(arr,function(x,callback){iterator(x,function(result){if(result){main_callback(x);main_callback=function(){}}else{callback()}})},function(err){main_callback()})};async.detect=doParallel(_detect);async.detectSeries=doSeries(_detect);async.some=function(arr,iterator,main_callback){async.each(arr,function(x,callback){iterator(x,function(v){if(v){main_callback(true);main_callback=function(){}}callback()})},function(err){main_callback(false)})};async.any=async.some;async.every=function(arr,iterator,main_callback){async.each(arr,function(x,callback){iterator(x,function(v){if(!v){main_callback(false);main_callback=function(){}}callback()})},function(err){main_callback(true)})};async.all=async.every;async.sortBy=function(arr,iterator,callback){async.map(arr,function(x,callback){iterator(x,function(err,criteria){if(err){callback(err)}else{callback(null,{value:x,criteria:criteria})}})},function(err,results){if(err){return callback(err)}else{var fn=function(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0};callback(null,_map(results.sort(fn),function(x){return x.value}))}})};async.auto=function(tasks,callback){callback=callback||function(){};var keys=_keys(tasks);var remainingTasks=keys.length;if(!remainingTasks){return callback()}var results={};var listeners=[];var addListener=function(fn){listeners.unshift(fn)};var removeListener=function(fn){for(var i=0;i<listeners.length;i+=1){if(listeners[i]===fn){listeners.splice(i,1);return}}};var taskComplete=function(){remainingTasks--;_each(listeners.slice(0),function(fn){fn()})};addListener(function(){if(!remainingTasks){var theCallback=callback;callback=function(){};theCallback(null,results)}});_each(keys,function(k){var task=_isArray(tasks[k])?tasks[k]:[tasks[k]];var taskCallback=function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}if(err){var safeResults={};_each(_keys(results),function(rkey){safeResults[rkey]=results[rkey]});safeResults[k]=args;callback(err,safeResults);callback=function(){}}else{results[k]=args;async.setImmediate(taskComplete)}};var requires=task.slice(0,Math.abs(task.length-1))||[];var ready=function(){return _reduce(requires,function(a,x){return a&&results.hasOwnProperty(x)},true)&&!results.hasOwnProperty(k)};if(ready()){task[task.length-1](taskCallback,results)}else{var listener=function(){if(ready()){removeListener(listener);task[task.length-1](taskCallback,results)}};addListener(listener)}})};async.retry=function(times,task,callback){var DEFAULT_TIMES=5;var attempts=[];if(typeof times==="function"){callback=task;task=times;times=DEFAULT_TIMES}times=parseInt(times,10)||DEFAULT_TIMES;var wrappedTask=function(wrappedCallback,wrappedResults){var retryAttempt=function(task,finalAttempt){return function(seriesCallback){task(function(err,result){seriesCallback(!err||finalAttempt,{err:err,result:result})},wrappedResults)}};while(times){attempts.push(retryAttempt(task,!(times-=1)))}async.series(attempts,function(done,data){data=data[data.length-1];(wrappedCallback||callback)(data.err,data.result)})};return callback?wrappedTask():wrappedTask};async.waterfall=function(tasks,callback){callback=callback||function(){};if(!_isArray(tasks)){var err=new Error("First argument to waterfall must be an array of functions");return callback(err)}if(!tasks.length){return callback()}var wrapIterator=function(iterator){return function(err){if(err){callback.apply(null,arguments);callback=function(){}}else{var args=Array.prototype.slice.call(arguments,1);var next=iterator.next();if(next){args.push(wrapIterator(next))}else{args.push(callback)}async.setImmediate(function(){iterator.apply(null,args)})}}};wrapIterator(async.iterator(tasks))()};var _parallel=function(eachfn,tasks,callback){callback=callback||function(){};if(_isArray(tasks)){eachfn.map(tasks,function(fn,callback){if(fn){fn(function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}callback.call(null,err,args)})}},callback)}else{var results={};eachfn.each(_keys(tasks),function(k,callback){tasks[k](function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}results[k]=args;callback(err)})},function(err){callback(err,results)})}};async.parallel=function(tasks,callback){_parallel({map:async.map,each:async.each},tasks,callback)};async.parallelLimit=function(tasks,limit,callback){_parallel({map:_mapLimit(limit),each:_eachLimit(limit)},tasks,callback)};async.series=function(tasks,callback){callback=callback||function(){};if(_isArray(tasks)){async.mapSeries(tasks,function(fn,callback){if(fn){fn(function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}callback.call(null,err,args)})}},callback)}else{var results={};async.eachSeries(_keys(tasks),function(k,callback){tasks[k](function(err){var args=Array.prototype.slice.call(arguments,1);if(args.length<=1){args=args[0]}results[k]=args;callback(err)})},function(err){callback(err,results)})}};async.iterator=function(tasks){var makeCallback=function(index){var fn=function(){if(tasks.length){tasks[index].apply(null,arguments)}return fn.next()};fn.next=function(){return index<tasks.length-1?makeCallback(index+1):null};return fn};return makeCallback(0)};async.apply=function(fn){var args=Array.prototype.slice.call(arguments,1);return function(){return fn.apply(null,args.concat(Array.prototype.slice.call(arguments)))}};var _concat=function(eachfn,arr,fn,callback){var r=[];eachfn(arr,function(x,cb){fn(x,function(err,y){r=r.concat(y||[]);cb(err)})},function(err){callback(err,r)})};async.concat=doParallel(_concat);async.concatSeries=doSeries(_concat);async.whilst=function(test,iterator,callback){if(test()){iterator(function(err){if(err){return callback(err)}async.whilst(test,iterator,callback)})}else{callback()}};async.doWhilst=function(iterator,test,callback){iterator(function(err){if(err){return callback(err)}var args=Array.prototype.slice.call(arguments,1);if(test.apply(null,args)){async.doWhilst(iterator,test,callback)}else{callback()}})};async.until=function(test,iterator,callback){if(!test()){iterator(function(err){if(err){return callback(err)}async.until(test,iterator,callback)})}else{callback()}};async.doUntil=function(iterator,test,callback){iterator(function(err){if(err){return callback(err)}var args=Array.prototype.slice.call(arguments,1);if(!test.apply(null,args)){async.doUntil(iterator,test,callback)}else{callback()}})};async.queue=function(worker,concurrency){if(concurrency===undefined){concurrency=1}function _insert(q,data,pos,callback){if(!q.started){q.started=true}if(!_isArray(data)){data=[data]}if(data.length==0){return async.setImmediate(function(){if(q.drain){q.drain()}})}_each(data,function(task){var item={data:task,callback:typeof callback==="function"?callback:null};if(pos){q.tasks.unshift(item)}else{q.tasks.push(item)}if(q.saturated&&q.tasks.length===q.concurrency){q.saturated()}async.setImmediate(q.process)})}var workers=0;var q={tasks:[],concurrency:concurrency,saturated:null,empty:null,drain:null,started:false,paused:false,push:function(data,callback){_insert(q,data,false,callback)},kill:function(){q.drain=null;q.tasks=[]},unshift:function(data,callback){_insert(q,data,true,callback)},process:function(){if(!q.paused&&workers<q.concurrency&&q.tasks.length){var task=q.tasks.shift();if(q.empty&&q.tasks.length===0){q.empty()}workers+=1;var next=function(){workers-=1;if(task.callback){task.callback.apply(task,arguments)}if(q.drain&&q.tasks.length+workers===0){q.drain()}q.process()};var cb=only_once(next);worker(task.data,cb)}},length:function(){return q.tasks.length},running:function(){return workers},idle:function(){return q.tasks.length+workers===0},pause:function(){if(q.paused===true){return}q.paused=true;q.process()},resume:function(){if(q.paused===false){return}q.paused=false;q.process()}};return q};async.priorityQueue=function(worker,concurrency){function _compareTasks(a,b){return a.priority-b.priority}function _binarySearch(sequence,item,compare){var beg=-1,end=sequence.length-1;while(beg<end){var mid=beg+(end-beg+1>>>1);if(compare(item,sequence[mid])>=0){beg=mid}else{end=mid-1}}return beg}function _insert(q,data,priority,callback){if(!q.started){q.started=true}if(!_isArray(data)){data=[data]}if(data.length==0){return async.setImmediate(function(){if(q.drain){q.drain()}})}_each(data,function(task){var item={data:task,priority:priority,callback:typeof callback==="function"?callback:null};q.tasks.splice(_binarySearch(q.tasks,item,_compareTasks)+1,0,item);if(q.saturated&&q.tasks.length===q.concurrency){q.saturated()}async.setImmediate(q.process)})}var q=async.queue(worker,concurrency);q.push=function(data,priority,callback){_insert(q,data,priority,callback)};delete q.unshift;return q};async.cargo=function(worker,payload){var working=false,tasks=[];var cargo={tasks:tasks,payload:payload,saturated:null,empty:null,drain:null,drained:true,push:function(data,callback){if(!_isArray(data)){data=[data]}_each(data,function(task){tasks.push({data:task,callback:typeof callback==="function"?callback:null});cargo.drained=false;if(cargo.saturated&&tasks.length===payload){cargo.saturated()}});async.setImmediate(cargo.process)},process:function process(){if(working)return;if(tasks.length===0){if(cargo.drain&&!cargo.drained)cargo.drain();cargo.drained=true;return}var ts=typeof payload==="number"?tasks.splice(0,payload):tasks.splice(0,tasks.length);var ds=_map(ts,function(task){return task.data});if(cargo.empty)cargo.empty();working=true;worker(ds,function(){working=false;var args=arguments;_each(ts,function(data){if(data.callback){data.callback.apply(null,args)}});process()})},length:function(){return tasks.length},running:function(){return working}};return cargo};var _console_fn=function(name){return function(fn){var args=Array.prototype.slice.call(arguments,1);fn.apply(null,args.concat([function(err){var args=Array.prototype.slice.call(arguments,1);if(typeof console!=="undefined"){if(err){if(console.error){console.error(err)}}else if(console[name]){_each(args,function(x){console[name](x)})}}}]))}};async.log=_console_fn("log");async.dir=_console_fn("dir");async.memoize=function(fn,hasher){var memo={};var queues={};hasher=hasher||function(x){return x};var memoized=function(){var args=Array.prototype.slice.call(arguments);var callback=args.pop();var key=hasher.apply(null,args);if(key in memo){async.nextTick(function(){callback.apply(null,memo[key])})}else if(key in queues){queues[key].push(callback)}else{queues[key]=[callback];fn.apply(null,args.concat([function(){memo[key]=arguments;var q=queues[key];delete queues[key];for(var i=0,l=q.length;i<l;i++){q[i].apply(null,arguments)}}]))}};memoized.memo=memo;memoized.unmemoized=fn;return memoized};async.unmemoize=function(fn){return function(){return(fn.unmemoized||fn).apply(null,arguments)}};async.times=function(count,iterator,callback){var counter=[];for(var i=0;i<count;i++){counter.push(i)}return async.map(counter,iterator,callback)};async.timesSeries=function(count,iterator,callback){var counter=[];for(var i=0;i<count;i++){counter.push(i)}return async.mapSeries(counter,iterator,callback)};async.seq=function(){var fns=arguments;return function(){var that=this;var args=Array.prototype.slice.call(arguments);var callback=args.pop();async.reduce(fns,args,function(newargs,fn,cb){fn.apply(that,newargs.concat([function(){var err=arguments[0];var nextargs=Array.prototype.slice.call(arguments,1);cb(err,nextargs)}]))},function(err,results){callback.apply(that,[err].concat(results))})}};async.compose=function(){return async.seq.apply(null,Array.prototype.reverse.call(arguments))};var _applyEach=function(eachfn,fns){var go=function(){var that=this;var args=Array.prototype.slice.call(arguments);var callback=args.pop();return eachfn(fns,function(fn,cb){fn.apply(that,args.concat([cb]))},callback)};if(arguments.length>2){var args=Array.prototype.slice.call(arguments,2);return go.apply(this,args)}else{return go}};async.applyEach=doParallel(_applyEach);async.applyEachSeries=doSeries(_applyEach);async.forever=function(fn,callback){function next(err){if(err){if(callback){return callback(err)}throw err}fn(next)}next()};if(typeof module!=="undefined"&&module.exports){module.exports=async}else if(typeof define!=="undefined"&&define.amd){define([],function(){return async})}else{root.async=async}})()}).call(this,require("/home/admin/browserify-cdn/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js"))},{"/home/admin/browserify-cdn/node_modules/browserify/node_modules/insert-module-globals/node_modules/process/browser.js":1}],30:[function(require,module,exports){module.exports=require(19)},{}],31:[function(require,module,exports){var protocols=["stun:","turn:"];module.exports=function(input){var url=(input||{}).url||input;var protocol;var parts;var output={};if(typeof url!="string"&&!(url instanceof String)){return input}url=url.trim();protocol=protocols[protocols.indexOf(url.slice(0,5))];if(!protocol){return input}url=url.slice(5);parts=url.split("@");output.username=input.username;output.credential=input.credential;if(parts.length>1){url=parts[1];parts=parts[0].split(":");output.username=parts[0];output.credential=(input||{}).credential||parts[1]||""}output.url=protocol+url;output.urls=[output.url];return output}},{}]},{},[]);var quickconnect=require("rtc-quickconnect");var console=require("demo-console");quickconnect("http://rtc.io/switchboard/",{room:"qc-simple-demo"}).on("call:started",function(id,pc,data){console.log("we have a new connection to: "+id)}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "requirebin-sketch", | |
"version": "1.0.0", | |
"dependencies": { | |
"demo-console": "1.5.0", | |
"rtc-quickconnect": "2.5.0" | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<style type='text/css'>html, body { margin: 0; padding: 0; border: 0; } | |
body, html { height: 100%; width: 100%; }</style> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment