zdpjs_webrtc
Version:
基于easyrtc二次开发的webrtc框架
366 lines • 561 kB
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>EasyRTC Documentation</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
<link href="../assets/easyrtc-docs-jsdoc-styles-1.css" media="all" rel="stylesheet" />
</head>
<body>
<header class="template">
<div class="wrapper-content">
<a href="../index.html"><img src="../assets/easyrtc-logo.png" alt="EasyRTC Documentation"></a>
<h1 title="EasyRTC Documentation">Documentation</h1>
</div>
</header>
<div class="wrapper-docs">
<nav>
<h2><a href="../index.html">Docs Home</a></h2>
<h3>EasyRTC Guides</h3>
<ul>
<li><a href="../easyrtc_faq.html">FAQ</a></li>
<li><a href="../easyrtc_gettingStarted.html">Getting Started</a></li>
<li><a href="../easyrtc_server_install.html">EasyRTC Server: Installation</a></li>
<li><a href="../easyrtc_client_tutorial.html">EasyRTC Framework Tutorial</a></li>
<li><a href="../easyrtc_rooms.html">Rooms</a></li>
<li><a href="../easyrtc_server_configuration.html">EasyRTC Server: Configuration</a></li>
<li><a href="../easyrtc_server_events.html">EasyRTC Server: Events</a></li>
<li><a href="../easyrtc_server_ice.html">EasyRTC Server: ICE Configuration</a></li>
<li><a href="../easyrtc_with_other_servers.html">Using Alongside Other Servers</a></li>
<li><a href="../easyrtc_server_ssl.html">EasyRTC Server: Using SSL</a></li>
<li><a href="../easyrtc_webrtc_problems.html">WebRTC Problems and Possible Fixes</a></li>
<li><a href="../easyrtc_upcoming_features.html">Upcoming Features</a></li>
<li><a href="../easyrtc_changelog.html">Change Log</a></li>
</ul>
<h3>EasyRTC Client Classes</h3>
<ul>
<li><a href="../client-api/Easyrtc.html">Easyrtc</a></li>
<li><a href="../client-api/Easyrtc_App.html">Easyrtc_App</a></li>
<li><a href="../client-api/Easyrtc_ft.html">Easyrtc_ft</a></li>
<li><a href="../client-api/Easyrtc_IframeCapture.html">Easyrtc_IframeCapture</a></li>
<li><a href="../client-api/Easyrtc_No_IframeCapture.html">Easyrtc_No_IframeCapture</a></li>
<li><a href="../client-api/Easyrtc_Rates.html">Easyrtc_Rates</a></li>
<li><a href="../client-api/Easyrtc_Recorder.html">Easyrtc_Recorder</a></li>
</ul>
<h3>EasyRTC Server Modules</h3>
<ul>
<li><a href="../server-api/module-easyrtc_default_event_listeners.html">easyrtc_default_event_listeners</a></li>
<li><a href="../server-api/module-easyrtc_default_options.html">easyrtc_default_options</a></li>
<li><a href="../server-api/module-easyrtc_private_obj.html">easyrtc_private_obj</a></li>
<li><a href="../server-api/module-easyrtc_public_obj.html">easyrtc_public_obj</a></li>
<li><a href="../server-api/module-easyrtc_util.html">easyrtc_util</a></li>
<li><a href="../server-api/module-general_util.html">general_util</a></li>
</ul>
<h3>EasyRTC Server Classes</h3>
<ul>
<li><a href="../server-api/module-easyrtc_default_event_listeners-eventListener.html">eventListener</a></li>
<li><a href="../server-api/module-easyrtc_public_obj-pub.html">pub</a></li>
<li><a href="../server-api/module-easyrtc_public_obj-pub.events.html">events</a></li>
<li><a href="../server-api/module-easyrtc_public_obj-pub.util.html">util</a></li>
<li><a href="../server-api/module-easyrtc_util-eu.html">eu</a></li>
<li><a href="../server-api/module-general_util-g.html">g</a></li>
<li><a href="../server-api/pub.appObj.html">appObj</a></li>
<li><a href="../server-api/pub.appObj.connectionObj.html">connectionObj</a></li>
<li><a href="../server-api/pub.appObj.connectionObj.connectionRoomObj.html">connectionRoomObj</a></li>
<li><a href="../server-api/pub.appObj.roomObj.html">roomObj</a></li>
<li><a href="../server-api/pub.appObj.sessionObj.html">sessionObj</a></li>
</ul>
</nav>
<div class="easyrtc-docs-content">
<div id="main">
<h1 class="page-title">Source: easyrtc_public_obj.js</h1>
<section>
<article>
<pre class="prettyprint source linenums easyrtc"><code><a name="line1"></a><div class="linenumber">1</div><div style="width:0em;display:inline-block"></div>/* global module, require */
<a name="line2"></a><div class="linenumber">2</div><div style="width:0em;display:inline-block"></div>
<a name="line3"></a><div class="linenumber">3</div><div style="width:0em;display:inline-block"></div>/**
<a name="line4"></a><div class="linenumber">4</div><div style="width:0em;display:inline-block"></div>* Public interface for interacting with EasyRTC. Contains the public object returned by the EasyRTC listen() function.
<a name="line5"></a><div class="linenumber">5</div><div style="width:0em;display:inline-block"></div>*
<a name="line6"></a><div class="linenumber">6</div><div style="width:0em;display:inline-block"></div>* @module easyrtc_public_obj
<a name="line7"></a><div class="linenumber">7</div><div style="width:0em;display:inline-block"></div>* @author Priologic Software, info@easyrtc.com
<a name="line8"></a><div class="linenumber">8</div><div style="width:0em;display:inline-block"></div>* @copyright Copyright 2016 Priologic Software. All rights reserved.
<a name="line9"></a><div class="linenumber">9</div><div style="width:0em;display:inline-block"></div>* @license BSD v2, see LICENSE file in module root folder.
<a name="line10"></a><div class="linenumber">10</div><div style="width:0em;display:inline-block"></div>*/
<a name="line11"></a><div class="linenumber">11</div><div style="width:0em;display:inline-block"></div>
<a name="line12"></a><div class="linenumber">12</div><div style="width:0em;display:inline-block"></div>var events = require("events");
<a name="line13"></a><div class="linenumber">13</div><div style="width:0em;display:inline-block"></div>var async = require("async");
<a name="line14"></a><div class="linenumber">14</div><div style="width:0em;display:inline-block"></div>var _ = require("underscore"); // General utility functions external module
<a name="line15"></a><div class="linenumber">15</div><div style="width:0em;display:inline-block"></div>var g = require("./general_util"); // General utility functions local module
<a name="line16"></a><div class="linenumber">16</div><div style="width:0em;display:inline-block"></div>
<a name="line17"></a><div class="linenumber">17</div><div style="width:0em;display:inline-block"></div>var e = require("./easyrtc_private_obj"); // EasyRTC private object
<a name="line18"></a><div class="linenumber">18</div><div style="width:0em;display:inline-block"></div>var eventListener = require("./easyrtc_default_event_listeners"); // EasyRTC default event listeners
<a name="line19"></a><div class="linenumber">19</div><div style="width:0em;display:inline-block"></div>var eu = require("./easyrtc_util"); // EasyRTC utility functions
<a name="line20"></a><div class="linenumber">20</div><div style="width:0em;display:inline-block"></div>
<a name="line21"></a><div class="linenumber">21</div><div style="width:0em;display:inline-block"></div>/**
<a name="line22"></a><div class="linenumber">22</div><div style="width:0em;display:inline-block"></div>* The public object which is returned by the EasyRTC listen() function. Contains all public methods for interacting with EasyRTC server.
<a name="line23"></a><div class="linenumber">23</div><div style="width:0em;display:inline-block"></div>*
<a name="line24"></a><div class="linenumber">24</div><div style="width:0em;display:inline-block"></div>* @class
<a name="line25"></a><div class="linenumber">25</div><div style="width:0em;display:inline-block"></div>*/
<a name="line26"></a><div class="linenumber">26</div><div style="width:0em;display:inline-block"></div>var pub = module.exports;
<a name="line27"></a><div class="linenumber">27</div><div style="width:0em;display:inline-block"></div>
<a name="line28"></a><div class="linenumber">28</div><div style="width:0em;display:inline-block"></div>/**
<a name="line29"></a><div class="linenumber">29</div><div style="width:0em;display:inline-block"></div>* Alias for Socket.io server object. Set during Listen().
<a name="line30"></a><div class="linenumber">30</div><div style="width:0em;display:inline-block"></div>*
<a name="line31"></a><div class="linenumber">31</div><div style="width:0em;display:inline-block"></div>* @member {Object} pub.socketServer
<a name="line32"></a><div class="linenumber">32</div><div style="width:0em;display:inline-block"></div>* @example <caption>Dump of all Socket.IO clients to server console</caption>
<a name="line33"></a><div class="linenumber">33</div><div style="width:0em;display:inline-block"></div>* console.log(pub.socketServer.connected);
<a name="line34"></a><div class="linenumber">34</div><div style="width:0em;display:inline-block"></div>*/
<a name="line35"></a><div class="linenumber">35</div><div style="width:0em;display:inline-block"></div>pub.socketServer = null;
<a name="line36"></a><div class="linenumber">36</div><div style="width:0em;display:inline-block"></div>
<a name="line37"></a><div class="linenumber">37</div><div style="width:0em;display:inline-block"></div>
<a name="line38"></a><div class="linenumber">38</div><div style="width:0em;display:inline-block"></div>/**
<a name="line39"></a><div class="linenumber">39</div><div style="width:0em;display:inline-block"></div>* Alias for Express app object. Set during Listen()
<a name="line40"></a><div class="linenumber">40</div><div style="width:0em;display:inline-block"></div>*
<a name="line41"></a><div class="linenumber">41</div><div style="width:0em;display:inline-block"></div>* @member {Object} pub.httpApp
<a name="line42"></a><div class="linenumber">42</div><div style="width:0em;display:inline-block"></div>*/
<a name="line43"></a><div class="linenumber">43</div><div style="width:0em;display:inline-block"></div>pub.httpApp = null;
<a name="line44"></a><div class="linenumber">44</div><div style="width:0em;display:inline-block"></div>
<a name="line45"></a><div class="linenumber">45</div><div style="width:0em;display:inline-block"></div>
<a name="line46"></a><div class="linenumber">46</div><div style="width:0em;display:inline-block"></div>/**
<a name="line47"></a><div class="linenumber">47</div><div style="width:0em;display:inline-block"></div>* Sends an array of all application names to a callback.
<a name="line48"></a><div class="linenumber">48</div><div style="width:0em;display:inline-block"></div>*
<a name="line49"></a><div class="linenumber">49</div><div style="width:0em;display:inline-block"></div>* @param {function(Error, Array.<string>)} callback Callback with error and array containing all application names.
<a name="line50"></a><div class="linenumber">50</div><div style="width:0em;display:inline-block"></div>*/
<a name="line51"></a><div class="linenumber">51</div><div style="width:0em;display:inline-block"></div>pub.getAppNames = function(callback) {
<a name="line52"></a><div class="linenumber">52</div><div style="width:2em;display:inline-block"></div>var appNames = [];
<a name="line53"></a><div class="linenumber">53</div><div style="width:2em;display:inline-block"></div>for (var key in e.app) {
<a name="line54"></a><div class="linenumber">54</div><div style="width:4em;display:inline-block"></div>appNames.push(key);
<a name="line55"></a><div class="linenumber">55</div><div style="width:2em;display:inline-block"></div>}
<a name="line56"></a><div class="linenumber">56</div><div style="width:2em;display:inline-block"></div>callback(null, appNames);
<a name="line57"></a><div class="linenumber">57</div><div style="width:0em;display:inline-block"></div>};
<a name="line58"></a><div class="linenumber">58</div><div style="width:0em;display:inline-block"></div>
<a name="line59"></a><div class="linenumber">59</div><div style="width:0em;display:inline-block"></div>
<a name="line60"></a><div class="linenumber">60</div><div style="width:0em;display:inline-block"></div>/**
<a name="line61"></a><div class="linenumber">61</div><div style="width:0em;display:inline-block"></div>* Gets app object for application which has an authenticated client with a given easyrtcid
<a name="line62"></a><div class="linenumber">62</div><div style="width:0em;display:inline-block"></div>*
<a name="line63"></a><div class="linenumber">63</div><div style="width:0em;display:inline-block"></div>* @param {String} easyrtcid Unique identifier for an EasyRTC connection.
<a name="line64"></a><div class="linenumber">64</div><div style="width:0em;display:inline-block"></div>* @param {function(?Error, Object=)} callback Callback with error and application object
<a name="line65"></a><div class="linenumber">65</div><div style="width:0em;display:inline-block"></div>*/
<a name="line66"></a><div class="linenumber">66</div><div style="width:0em;display:inline-block"></div>pub.getAppWithEasyrtcid = function(easyrtcid, callback) {
<a name="line67"></a><div class="linenumber">67</div><div style="width:2em;display:inline-block"></div>for (var key in e.app) {
<a name="line68"></a><div class="linenumber">68</div><div style="width:4em;display:inline-block"></div>if (e.app[key].connection[easyrtcid] && e.app[key].connection[easyrtcid].isAuthenticated) {
<a name="line69"></a><div class="linenumber">69</div><div style="width:6em;display:inline-block"></div>pub.app(key, callback);
<a name="line70"></a><div class="linenumber">70</div><div style="width:6em;display:inline-block"></div>return;
<a name="line71"></a><div class="linenumber">71</div><div style="width:4em;display:inline-block"></div>}
<a name="line72"></a><div class="linenumber">72</div><div style="width:2em;display:inline-block"></div>}
<a name="line73"></a><div class="linenumber">73</div><div style="width:2em;display:inline-block"></div>pub.util.logWarning("Can not find connection [" + easyrtcid + "]");
<a name="line74"></a><div class="linenumber">74</div><div style="width:2em;display:inline-block"></div>callback(new pub.util.ConnectionWarning("Can not find connection [" + easyrtcid + "]"));
<a name="line75"></a><div class="linenumber">75</div><div style="width:0em;display:inline-block"></div>};
<a name="line76"></a><div class="linenumber">76</div><div style="width:0em;display:inline-block"></div>
<a name="line77"></a><div class="linenumber">77</div><div style="width:0em;display:inline-block"></div>
<a name="line78"></a><div class="linenumber">78</div><div style="width:0em;display:inline-block"></div>/**
<a name="line79"></a><div class="linenumber">79</div><div style="width:0em;display:inline-block"></div>* Sends the count of the number of connections to the server to a provided callback.
<a name="line80"></a><div class="linenumber">80</div><div style="width:0em;display:inline-block"></div>*
<a name="line81"></a><div class="linenumber">81</div><div style="width:0em;display:inline-block"></div>* @param {function(?Error, Number)} callback Callback with error and array containing all easyrtcids.
<a name="line82"></a><div class="linenumber">82</div><div style="width:0em;display:inline-block"></div>*/
<a name="line83"></a><div class="linenumber">83</div><div style="width:0em;display:inline-block"></div>pub.getConnectionCount = function(callback) {
<a name="line84"></a><div class="linenumber">84</div><div style="width:2em;display:inline-block"></div>callback(null, pub.getConnectionCountSync());
<a name="line85"></a><div class="linenumber">85</div><div style="width:0em;display:inline-block"></div>};
<a name="line86"></a><div class="linenumber">86</div><div style="width:0em;display:inline-block"></div>
<a name="line87"></a><div class="linenumber">87</div><div style="width:0em;display:inline-block"></div>
<a name="line88"></a><div class="linenumber">88</div><div style="width:0em;display:inline-block"></div>/**
<a name="line89"></a><div class="linenumber">89</div><div style="width:0em;display:inline-block"></div>* Sends the count of the number of connections to the server to a provided callback.
<a name="line90"></a><div class="linenumber">90</div><div style="width:0em;display:inline-block"></div>*
<a name="line91"></a><div class="linenumber">91</div><div style="width:0em;display:inline-block"></div>* @returns {Number} The current number of connections in a room.
<a name="line92"></a><div class="linenumber">92</div><div style="width:0em;display:inline-block"></div>*/
<a name="line93"></a><div class="linenumber">93</div><div style="width:0em;display:inline-block"></div>pub.getConnectionCountSync = function() {
<a name="line94"></a><div class="linenumber">94</div><div style="width:2em;display:inline-block"></div>var connectionCount = 0;
<a name="line95"></a><div class="linenumber">95</div><div style="width:2em;display:inline-block"></div>for (var key in e.app) {
<a name="line96"></a><div class="linenumber">96</div><div style="width:4em;display:inline-block"></div>connectionCount = connectionCount + _.size(e.app[key].connection);
<a name="line97"></a><div class="linenumber">97</div><div style="width:2em;display:inline-block"></div>}
<a name="line98"></a><div class="linenumber">98</div><div style="width:2em;display:inline-block"></div>return connectionCount;
<a name="line99"></a><div class="linenumber">99</div><div style="width:0em;display:inline-block"></div>};
<a name="line100"></a><div class="linenumber">100</div><div style="width:0em;display:inline-block"></div>
<a name="line101"></a><div class="linenumber">101</div><div style="width:0em;display:inline-block"></div>
<a name="line102"></a><div class="linenumber">102</div><div style="width:0em;display:inline-block"></div>/**
<a name="line103"></a><div class="linenumber">103</div><div style="width:0em;display:inline-block"></div>* Gets connection object for connection which has an authenticated client with a given easyrtcid
<a name="line104"></a><div class="linenumber">104</div><div style="width:0em;display:inline-block"></div>*
<a name="line105"></a><div class="linenumber">105</div><div style="width:0em;display:inline-block"></div>* @param {string} easyrtcid EasyRTC unique identifier for a socket connection.
<a name="line106"></a><div class="linenumber">106</div><div style="width:0em;display:inline-block"></div>* @param {function(?Error, Object=)} callback Callback with error and connection object
<a name="line107"></a><div class="linenumber">107</div><div style="width:0em;display:inline-block"></div>*/
<a name="line108"></a><div class="linenumber">108</div><div style="width:0em;display:inline-block"></div>pub.getConnectionWithEasyrtcid = function(easyrtcid, callback) {
<a name="line109"></a><div class="linenumber">109</div><div style="width:2em;display:inline-block"></div>for (var key in e.app) {
<a name="line110"></a><div class="linenumber">110</div><div style="width:4em;display:inline-block"></div>if (e.app[key].connection[easyrtcid] && e.app[key].connection[easyrtcid].isAuthenticated) {
<a name="line111"></a><div class="linenumber">111</div><div style="width:6em;display:inline-block"></div>pub.app(key, function(err, appObj) {
<a name="line112"></a><div class="linenumber">112</div><div style="width:8em;display:inline-block"></div>if (err) {
<a name="line113"></a><div class="linenumber">113</div><div style="width:10em;display:inline-block"></div>callback(err);
<a name="line114"></a><div class="linenumber">114</div><div style="width:10em;display:inline-block"></div>return;
<a name="line115"></a><div class="linenumber">115</div><div style="width:8em;display:inline-block"></div>}
<a name="line116"></a><div class="linenumber">116</div><div style="width:8em;display:inline-block"></div>appObj.connection(easyrtcid, callback);
<a name="line117"></a><div class="linenumber">117</div><div style="width:6em;display:inline-block"></div>});
<a name="line118"></a><div class="linenumber">118</div><div style="width:6em;display:inline-block"></div>return;
<a name="line119"></a><div class="linenumber">119</div><div style="width:4em;display:inline-block"></div>}
<a name="line120"></a><div class="linenumber">120</div><div style="width:2em;display:inline-block"></div>}
<a name="line121"></a><div class="linenumber">121</div><div style="width:2em;display:inline-block"></div>pub.util.logWarning("Can not find connection [" + easyrtcid + "]");
<a name="line122"></a><div class="linenumber">122</div><div style="width:2em;display:inline-block"></div>callback(new pub.util.ConnectionWarning("Can not find connection [" + easyrtcid + "]"));
<a name="line123"></a><div class="linenumber">123</div><div style="width:0em;display:inline-block"></div>};
<a name="line124"></a><div class="linenumber">124</div><div style="width:0em;display:inline-block"></div>
<a name="line125"></a><div class="linenumber">125</div><div style="width:0em;display:inline-block"></div>
<a name="line126"></a><div class="linenumber">126</div><div style="width:0em;display:inline-block"></div>/**
<a name="line127"></a><div class="linenumber">127</div><div style="width:0em;display:inline-block"></div>* Gets individual option value. The option value returned is for the server level.
<a name="line128"></a><div class="linenumber">128</div><div style="width:0em;display:inline-block"></div>*
<a name="line129"></a><div class="linenumber">129</div><div style="width:0em;display:inline-block"></div>* Note that some options can be set at the application or room level. If an option has not been set at the room level, it will check to see if it has been set at the application level, if not it will revert to the server level.
<a name="line130"></a><div class="linenumber">130</div><div style="width:0em;display:inline-block"></div>*
<a name="line131"></a><div class="linenumber">131</div><div style="width:0em;display:inline-block"></div>* @param {String} optionName Option name
<a name="line132"></a><div class="linenumber">132</div><div style="width:0em;display:inline-block"></div>* @return {*} Option value (can be any JSON type)
<a name="line133"></a><div class="linenumber">133</div><div style="width:0em;display:inline-block"></div>*/
<a name="line134"></a><div class="linenumber">134</div><div style="width:0em;display:inline-block"></div>pub.getOption = function(optionName) {
<a name="line135"></a><div class="linenumber">135</div><div style="width:2em;display:inline-block"></div>if(typeof e.option[optionName] === "undefined"){
<a name="line136"></a><div class="linenumber">136</div><div style="width:4em;display:inline-block"></div>pub.util.logError("Unknown option requested. Unrecognised option name '" + optionName + "'.");
<a name="line137"></a><div class="linenumber">137</div><div style="width:4em;display:inline-block"></div>return null;
<a name="line138"></a><div class="linenumber">138</div><div style="width:2em;display:inline-block"></div>}
<a name="line139"></a><div class="linenumber">139</div><div style="width:2em;display:inline-block"></div>return e.option[optionName];
<a name="line140"></a><div class="linenumber">140</div><div style="width:0em;display:inline-block"></div>};
<a name="line141"></a><div class="linenumber">141</div><div style="width:0em;display:inline-block"></div>
<a name="line142"></a><div class="linenumber">142</div><div style="width:0em;display:inline-block"></div>
<a name="line143"></a><div class="linenumber">143</div><div style="width:0em;display:inline-block"></div>/**
<a name="line144"></a><div class="linenumber">144</div><div style="width:0em;display:inline-block"></div>* Gets EasyRTC Version. The format is in a major.minor.patch format with an optional letter following denoting alpha or beta status. The version is retrieved from the package.json file located in the EasyRTC project root folder.
<a name="line145"></a><div class="linenumber">145</div><div style="width:0em;display:inline-block"></div>*
<a name="line146"></a><div class="linenumber">146</div><div style="width:0em;display:inline-block"></div>* @return {string} EasyRTC Version
<a name="line147"></a><div class="linenumber">147</div><div style="width:0em;display:inline-block"></div>*/
<a name="line148"></a><div class="linenumber">148</div><div style="width:0em;display:inline-block"></div>pub.getVersion = function() {
<a name="line149"></a><div class="linenumber">149</div><div style="width:2em;display:inline-block"></div>return e.version;
<a name="line150"></a><div class="linenumber">150</div><div style="width:0em;display:inline-block"></div>};
<a name="line151"></a><div class="linenumber">151</div><div style="width:0em;display:inline-block"></div>
<a name="line152"></a><div class="linenumber">152</div><div style="width:0em;display:inline-block"></div>
<a name="line153"></a><div class="linenumber">153</div><div style="width:0em;display:inline-block"></div>/**
<a name="line154"></a><div class="linenumber">154</div><div style="width:0em;display:inline-block"></div>* Returns the EasyRTC private object containing the current state. This should only be used for debugging purposes.
<a name="line155"></a><div class="linenumber">155</div><div style="width:0em;display:inline-block"></div>*
<a name="line156"></a><div class="linenumber">156</div><div style="width:0em;display:inline-block"></div>* @private
<a name="line157"></a><div class="linenumber">157</div><div style="width:0em;display:inline-block"></div>* @return {Object} EasyRTC private object
<a name="line158"></a><div class="linenumber">158</div><div style="width:0em;display:inline-block"></div>*/
<a name="line159"></a><div class="linenumber">159</div><div style="width:0em;display:inline-block"></div>pub._getPrivateObj = function() {
<a name="line160"></a><div class="linenumber">160</div><div style="width:2em;display:inline-block"></div>return e;
<a name="line161"></a><div class="linenumber">161</div><div style="width:0em;display:inline-block"></div>};
<a name="line162"></a><div class="linenumber">162</div><div style="width:0em;display:inline-block"></div>
<a name="line163"></a><div class="linenumber">163</div><div style="width:0em;display:inline-block"></div>
<a name="line164"></a><div class="linenumber">164</div><div style="width:0em;display:inline-block"></div>/**
<a name="line165"></a><div class="linenumber">165</div><div style="width:0em;display:inline-block"></div>* Sets individual option. The option value set is for the server level.
<a name="line166"></a><div class="linenumber">166</div><div style="width:0em;display:inline-block"></div>*
<a name="line167"></a><div class="linenumber">167</div><div style="width:0em;display:inline-block"></div>* Note that some options can be set at the application or room level. If an option has not been set at the room level, it will check to see if it has been set at the application level, if not it will revert to the server level.
<a name="line168"></a><div class="linenumber">168</div><div style="width:0em;display:inline-block"></div>*
<a name="line169"></a><div class="linenumber">169</div><div style="width:0em;display:inline-block"></div>* @param {Object} optionName Option name
<a name="line170"></a><div class="linenumber">170</div><div style="width:0em;display:inline-block"></div>* @param {Object} optionValue Option value
<a name="line171"></a><div class="linenumber">171</div><div style="width:0em;display:inline-block"></div>* @return {Boolean} true on success, false on failure
<a name="line172"></a><div class="linenumber">172</div><div style="width:0em;display:inline-block"></div>*/
<a name="line173"></a><div class="linenumber">173</div><div style="width:0em;display:inline-block"></div>pub.setOption = function(optionName, optionValue) {
<a name="line174"></a><div class="linenumber">174</div><div style="width:2em;display:inline-block"></div>// Can only set options which currently exist
<a name="line175"></a><div class="linenumber">175</div><div style="width:2em;display:inline-block"></div>if (typeof e.option[optionName] == "undefined") {
<a name="line176"></a><div class="linenumber">176</div><div style="width:4em;display:inline-block"></div>pub.util.logError("Error setting option. Unrecognised option name '" + optionName + "'.");
<a name="line177"></a><div class="linenumber">177</div><div style="width:4em;display:inline-block"></div>return false;
<a name="line178"></a><div class="linenumber">178</div><div style="width:2em;display:inline-block"></div>}
<a name="line179"></a><div class="linenumber">179</div><div style="width:0em;display:inline-block"></div>
<a name="line180"></a><div class="linenumber">180</div><div style="width:2em;display:inline-block"></div>e.option[optionName] = pub.util.deepCopy(optionValue);
<a name="line181"></a><div class="linenumber">181</div><div style="width:2em;display:inline-block"></div>return true;
<a name="line182"></a><div class="linenumber">182</div><div style="width:0em;display:inline-block"></div>};
<a name="line183"></a><div class="linenumber">183</div><div style="width:0em;display:inline-block"></div>
<a name="line184"></a><div class="linenumber">184</div><div style="width:0em;display:inline-block"></div>
<a name="line185"></a><div class="linenumber">185</div><div style="width:0em;display:inline-block"></div>/**
<a name="line186"></a><div class="linenumber">186</div><div style="width:0em;display:inline-block"></div>* EasyRTC Event handling object which contain most methods for interacting with EasyRTC events. For convenience, this class has also been attached to the application, connection, session, and room classes.
<a name="line187"></a><div class="linenumber">187</div><div style="width:0em;display:inline-block"></div>* @class
<a name="line188"></a><div class="linenumber">188</div><div style="width:0em;display:inline-block"></div>*/
<a name="line189"></a><div class="linenumber">189</div><div style="width:0em;display:inline-block"></div>pub.events = {};
<a name="line190"></a><div class="linenumber">190</div><div style="width:0em;display:inline-block"></div>
<a name="line191"></a><div class="linenumber">191</div><div style="width:0em;display:inline-block"></div>
<a name="line192"></a><div class="linenumber">192</div><div style="width:0em;display:inline-block"></div>/**
<a name="line193"></a><div class="linenumber">193</div><div style="width:0em;display:inline-block"></div>* EasyRTC EventEmitter.
<a name="line194"></a><div class="linenumber">194</div><div style="width:0em;display:inline-block"></div>*
<a name="line195"></a><div class="linenumber">195</div><div style="width:0em;display:inline-block"></div>* @private
<a name="line196"></a><div class="linenumber">196</div><div style="width:0em;display:inline-block"></div>*/
<a name="line197"></a><div class="linenumber">197</div><div style="width:0em;display:inline-block"></div>pub.events._eventListener = new events.EventEmitter();
<a name="line198"></a><div class="linenumber">198</div><div style="width:0em;display:inline-block"></div>
<a name="line199"></a><div class="linenumber">199</div><div style="width:0em;display:inline-block"></div>
<a name="line200"></a><div class="linenumber">200</div><div style="width:0em;display:inline-block"></div>/**
<a name="line201"></a><div class="linenumber">201</div><div style="width:0em;display:inline-block"></div>* Expose event listener's emit function.
<a name="line202"></a><div class="linenumber">202</div><div style="width:0em;display:inline-block"></div>*
<a name="line203"></a><div class="linenumber">203</div><div style="width:0em;display:inline-block"></div>* @param {string} eventName EasyRTC event name.
<a name="line204"></a><div class="linenumber">204</div><div style="width:0em;display:inline-block"></div>* @param {...*} eventParam The event parameters
<a name="line205"></a><div class="linenumber">205</div><div style="width:0em;display:inline-block"></div>*/
<a name="line206"></a><div class="linenumber">206</div><div style="width:0em;display:inline-block"></div>pub.events.emit = pub.events._eventListener.emit.bind(pub.events._eventListener);
<a name="line207"></a><div class="linenumber">207</div><div style="width:0em;display:inline-block"></div>
<a name="line208"></a><div class="linenumber">208</div><div style="width:0em;display:inline-block"></div>
<a name="line209"></a><div class="linenumber">209</div><div style="width:0em;display:inline-block"></div>/**
<a name="line210"></a><div class="linenumber">210</div><div style="width:0em;display:inline-block"></div>* Runs the default EasyRTC listener for a given event.
<a name="line211"></a><div class="linenumber">211</div><div style="width:0em;display:inline-block"></div>*
<a name="line212"></a><div class="linenumber">212</div><div style="width:0em;display:inline-block"></div>* @param {string} eventName EasyRTC event name.
<a name="line213"></a><div class="linenumber">213</div><div style="width:0em;display:inline-block"></div>* @param {...*} eventParam The event parameters
<a name="line214"></a><div class="linenumber">214</div><div style="width:0em;display:inline-block"></div>*/
<a name="line215"></a><div class="linenumber">215</div><div style="width:0em;display:inline-block"></div>pub.events.emitDefault = function() {
<a name="line216"></a><div class="linenumber">216</div><div style="width:2em;display:inline-block"></div>if (!pub.events.defaultListeners[arguments['0']]) {
<a name="line217"></a><div class="linenumber">217</div><div style="width:4em;display:inline-block"></div>console.error("Error emitting listener. No default for event '" + arguments['0'] + "' exists.");
<a name="line218"></a><div class="linenumber">218</div><div style="width:4em;display:inline-block"></div>return;
<a name="line219"></a><div class="linenumber">219</div><div style="width:2em;display:inline-block"></div>}
<a name="line220"></a><div class="linenumber">220</div><div style="width:2em;display:inline-block"></div>pub.events.defaultListeners[Array.prototype.shift.call(arguments)].apply(this, arguments);
<a name="line221"></a><div class="linenumber">221</div><div style="width:0em;display:inline-block"></div>};
<a name="line222"></a><div class="linenumber">222</div><div style="width:0em;display:inline-block"></div>
<a name="line223"></a><div class="linenumber">223</div><div style="width:0em;display:inline-block"></div>
<a name="line224"></a><div class="linenumber">224</div><div style="width:0em;display:inline-block"></div>/**
<a name="line225"></a><div class="linenumber">225</div><div style="width:0em;display:inline-block"></div>* Resets the listener for a given event to the default listener. Removes other listeners.
<a name="line226"></a><div class="linenumber">226</div><div style="width:0em;display:inline-block"></div>*
<a name="line227"></a><div class="linenumber">227</div><div style="width:0em;display:inline-block"></div>* @param {string} eventName EasyRTC event name.
<a name="line228"></a><div class="linenumber">228</div><div style="width:0em;display:inline-block"></div>*/
<a name="line229"></a><div class="linenumber">229</div><div style="width:0em;display:inline-block"></div>pub.events.setDefaultListener = function(eventName) {
<a name="line230"></a><div class="linenumber">230</div><div style="width:2em;display:inline-block"></div>if (!_.isFunction(pub.events.defaultListeners[eventName])) {
<a name="line231"></a><div class="linenumber">231</div><div style="width:4em;display:inline-block"></div>console.error("Error setting default listener. No default for event '" + eventName + "' exists.");
<a name="line232"></a><div class="linenumber">232</div><div style="width:2em;display:inline-block"></div>}
<a name="line233"></a><div class="linenumber">233</div><div style="width:2em;display:inline-block"></div>pub.events._eventListener.removeAllListeners(eventName);
<a name="line234"></a><div class="linenumber">234</div><div style="width:2em;display:inline-block"></div>pub.events._eventListener.on(eventName, pub.events.defaultListeners[eventName]);
<a name="line235"></a><div class="linenumber">235</div><div style="width:0em;display:inline-block"></div>};
<a name="line236"></a><div class="linenumber">236</div><div style="width:0em;display:inline-block"></div>
<a name="line237"></a><div class="linenumber">237</div><div style="width:0em;display:inline-block"></div>
<a name="line238"></a><div class="linenumber">238</div><div style="width:0em;display:inline-block"></div>/**
<a name="line239"></a><div class="linenumber">239</div><div style="width:0em;display:inline-block"></div>* Resets the listener for all EasyRTC events to the default listeners. Removes all other listeners.
<a name="line240"></a><div class="linenumber">240</div><div style="width:0em;display:inline-block"></div>*/
<a name="line241"></a><div class="linenumber">241</div><div style="width:0em;display:inline-block"></div>pub.events.setDefaultListeners = function() {
<a name="line242"></a><div class="linenumber">242</div><div style="width:2em;display:inline-block"></div>pub.events._eventListener.removeAllListeners();
<a name="line243"></a><div class="linenumber">243</div><div style="width:2em;display:inline-block"></div>for (var currentEventName in pub.events.defaultListeners) {
<a name="line244"></a><div class="linenumber">244</div><div style="width:4em;display:inline-block"></div>if (_.isFunction(pub.events.defaultListeners[currentEventName])) {
<a name="line245"></a><div class="linenumber">245</div><div style="width:6em;display:inline-block"></div>pub.events._eventListener.on(currentEventName, pub.events.defaultListeners[currentEventName]);
<a name="line246"></a><div class="linenumber">246</div><div style="width:4em;display:inline-block"></div>} else {
<a name="line247"></a><div class="linenumber">247</div><div style="width:6em;display:inline-block"></div>throw new pub.util.ServerError("Error setting default listener. No default for event '" + currentEventName + "' exists.");
<a name="line248"></a><div class="linenumber">248</div><div style="width:4em;display:inline-block"></div>}
<a name="line249"></a><div class="linenumber">249</div><div style="width:2em;display:inline-block"></div>}
<a name="line250"></a><div class="linenumber">250</div><div style="width:0em;display:inline-block"></div>};
<a name="line251"></a><div class="linenumber">251</div><div style="width:0em;display:inline-block"></div>
<a name="line252"></a><div class="linenumber">252</div><div style="width:0em;display:inline-block"></div>
<a name="line253"></a><div class="linenumber">253</div><div style="width:0em;display:inline-block"></div>/**
<a name="line254"></a><div class="linenumber">254</div><div style="width:0em;display:inline-block"></div>* Map of EasyRTC event listener names to their default functions. This map can be used to run a default function manually.
<a name="line255"></a><div class="linenumber">255</div><div style="width:0em;display:inline-block"></div>*/
<a name="line256"></a><div class="linenumber">256</div><div style="width:0em;display:inline-block"></div>pub.events.defaultListeners = {
<a name="line257"></a><div class="linenumber">257</div><div style="width:2em;display:inline-block"></div>"authenticate": eventListener.onAuthenticate,
<a name="line258"></a><div class="linenumber">258</div><div style="width:2em;display:inline-block"></div>"authenticated": eventListener.onAuthenticated,
<a name="line259"></a><div class="linenumber">259</div><div style="width:2em;display:inline-block"></div>"connection": eventListener.onConnection,
<a name="line260"></a><div class="linenumber">260</div><div style="width:2em;display:inline-block"></div>"disconnect": eventListener.onDisconnect,
<a name="line261"></a><div class="linenumber">261</div><div style="width:2em;display:inline-block"></div>"getIceConfig": eventListener.onGetIceConfig,
<a name="line262"></a><div class="linenumber">262</div><div style="width:2em;display:inline-block"></div>"roomCreate": eventListener.onRoomCreate,
<a name="line263"></a><div class="linenumber">263</div><div style="width:2em;display:inline-block"></div>"roomJoin": eventListener.onRoomJoin,
<a name="line264"></a><div class="linenumber">264</div><div style="width:2em;display:inline-block"></div>"roomLeave": eventListener.onRoomLeave,
<a name="line265"></a><div class="linenumber">265</div><div style="width:2em;display:inline-block"></div>"log": eventListener.onLog,
<a name="line266"></a><div class="linenumber">266</div><div style="width:2em;display:inline-block"></div>"shutdown": eventListener.onShutdown,
<a name="line267"></a><div class="linenumber">267</div><div style="width:2em;display:inline-block"></div>"startup": eventListener.onStartup,
<a name="line268"></a><div class="linenumber">268</div><div style="width:2em;display:inline-block"></div>"easyrtcAuth": eventListener.onEasyrtcAuth,
<a name="line269"></a><div class="linenumber">269</div><div style="width:2em;display:inline-block"></div>"easyrtcCmd": eventListener.onEasyrtcCmd,
<a name="line270"></a><div class="linenumber">270</div><div style="width:2em;display:inline-block"></div>"easyrtcMsg": eventListener.onEasyrtcMsg,
<a name="line271"></a><div class="linenumber">271</div><div style="width:2em;display:inline-block"></div>"emitEasyrtcCmd": eventListener.onEmitEasyrtcCmd,
<a name="line272"></a><div class="linenumber">272</div><div style="width:2em;display:inline-block"></div>"emitEasyrtcMsg": eventListener.onEmitEasyrtcMsg,
<a name="line273"></a><div class="linenumber">273</div><div style="width:2em;display:inline-block"></div>"emitError": eventListener.onEmitError,
<a name="line274"></a><div class="linenumber">274</div><div style="width:2em;display:inline-block"></div>"emitReturnAck": eventListener.onEmitReturnAck,
<a name="line275"></a><div class="linenumber">275</div><div style="width:2em;display:inline-block"></div>"emitReturnError": eventListener.onEmitReturnError,
<a name="line276"></a><div class="linenumber">276</div><div style="width:2em;display:inline-block"></div>"emitReturnToken": eventListener.onEmitReturnToken,
<a name="line277"></a><div class="linenumber">277</div><div style="width:2em;display:inline-block"></div>"msgTypeGetIceConfig": eventListener.onMsgTypeGetIceConfig,
<a name="line278"></a><div class="linenumber">278</div><div style="width:2em;display:inline-block"></div>"msgTypeGetRoomList": eventListener.onMsgTypeGetRoomList,
<a name="line279"></a><div class="linenumber">279</div><div style="width:2em;display:inline-block"></div>"msgTypeRoomJoin": eventListener.onMsgTypeRoomJoin,
<a name="line280"></a><div class="linenumber">280</div><div style="width:2em;display:inline-block"></div>"msgTypeRoomLeave": eventListener.onMsgTypeRoomLeave,
<a name="line281"></a><div class="linenumber">281</div><div style="width:2em;display:inline-block"></div>"msgTypeSetPresence": eventListener.onMsgTypeSetPresence,
<a name="line282"></a><div class="linenumber">282</div><div style="width:2em;display:inline-block"></div>"msgTypeSetRoomApiField": eventListener.onMsgTypeSetRoomApiField
<a name="line283"></a><div class="linenumber">283</div><div style="width:0em;display:inline-block"></div>};
<a name="line284"></a><div class="linenumber">284</div><div style="width:0em;display:inline-block"></div>
<a name="line285"></a><div class="linenumber">285</div><div style="width:0em;display:inline-block"></div>
<a name="line286"></a><div class="linenumber">286</div><div style="width:0em;display:inline-block"></div>/**
<a name="line287"></a><div class="linenumber">287</div><div style="width:0em;display:inline-block"></div>* Sets listener for a given EasyRTC event. Only one listener is allowed per event.