Source: easyrtc_server.js

1
/* global module, require */
2
3
/**
4
* @file        Entry library for EasyRTC server. Houses the primary listen function.
5
* @author      Priologic Software, info@easyrtc.com
6
* @copyright   Copyright 2016 Priologic Software. All rights reserved.
7
* @license     BSD v2, see LICENSE file in module root folder.
8
*/
9
10
var g           = require("./general_util");        // General utility functions local module
11
g.checkModules(); // Check to ensure all required modules are available
12
13
var _           = require("underscore");            // General utility functions external module
14
var pub         = require("./easyrtc_public_obj");  // EasyRTC public object
15
16
17
var server = module.exports;
18
19
/**
20
* Listener for starting the EasyRTC server. The successCallback can be used to determine when EasyRTC is fully running.
21
*
22
* @param       {Object} httpApp        express http object. Allows EasyRTC to interact with the http server.
23
* @param       {Object} socketServer   socket.io server object. Allows EasyRTC to interact with the socket server.
24
* @param       {Object} options        EasyRTC options object. Sets configurable options. If null, than defaults will be used.
25
* @param       {function(Error, Object)} listenCallback Called when the start up routines are complete. In form of successCallback(err, pub). The parameter 'err' will null unless an error occurs and 'pub' is the EasyRTC public object for interacting with the server.
26
*/
27
server.listen = function(httpApp, socketServer, options, listenCallback) {
28
pub.util.logInfo("Starting EasyRTC Server (v" + pub.getVersion() +") on Node (" + process.version + ")");
29
30
// Set server object references in public object
31
pub.httpApp         = httpApp;
32
pub.socketServer    = socketServer;
33
34
if (options){
35
pub.util.logDebug("Overriding options", options);
36
37
for (var optionName in options) {
38
pub.setOption(optionName, options[optionName]);
39
}
40
}
41
42
pub.util.logDebug("Emitting event 'startup'");
43
pub.events.emit("startup", function(err) {
44
if (err) {
45
pub.util.logError("Error occurred upon startup", err);
46
if(_.isFunction(listenCallback)) {
47
listenCallback(err, null);
48
}
49
}
50
else {
51
pub.util.logInfo("EasyRTC Server Ready For Connections (v"+ pub.getVersion() + ")");
52
if(_.isFunction(listenCallback)) {
53
listenCallback(err, pub);
54
}
55
}
56
});
57
};
58
59
/**
60
* Returns an EasyRTC options object with a copy of the default options.
61
*
62
* @returns     {Object}                EasyRTC options object
63
*/
64
server.getDefaultOptions = function() {
65
var defaultOptions = require("./easyrtc_default_options");
66
return g.deepCopy(defaultOptions);
67
};
68
69
/**
70
* Sets listener for a given EasyRTC event. Only one listener is allowed per event. Any other listeners for an event are removed before adding the new one.
71
*
72
* @private
73
* @param       {String} event          Listener name.
74
* @param       {Function} listener       Function
75
*/
76
server.on = function(event, listener) {
77
if (event && _.isFunction(listener)) {
78
pub.events.removeAllListeners(event);
79
pub.events.on(event, listener);
80
}
81
else {
82
pub.util.logError("Unable to add listener to event '" + event + "'");
83
}
84
};
85
86
/**
87
* Removes all listeners for an event. If there is a default EasyRTC listener, it will be added.
88
*
89
* @private
90
* @param       {String} event          Listener name.
91
*/
92
server.removeAllListeners = function(event) {
93
if (event) {
94
pub.events.removeAllListeners(event);
95
pub.events.setDefaultListener(event);
96
}
97
};
98
99
/**
100
* Returns the listeners for an event.
101
*
102
* @private
103
* @param       {String} event          Listener name.
104
*/
105
server.listeners = pub.events.listeners;
106
107
/**
108
* Expose all event functions
109
*/
110
server.events = pub.events;
111
112
/**
113
* Expose public utility functions
114
*/
115
server.util = pub.util;
116
117
/**
118
* Sets individual option.
119
*
120
* @param       {Object} option Option name
121
* @param       {Object} value  Option value
122
* @returns     {Boolean} true on success, false on failure
123
*/
124
server.setOption = pub.setOption;