/* global module, require */
/**
* Utility functions specific to EasyRTC.
*
* @module easyrtc_util
* @author Priologic Software, info@easyrtc.com
* @copyright Copyright 2016 Priologic Software. All rights reserved.
* @license BSD v2, see LICENSE file in module root folder.
*/
var util = require("util");
var _ = require("underscore"); // General utility functions external module
var g = require("./general_util"); // General utility functions local module
var e = require("./easyrtc_private_obj"); // EasyRTC private object
/**
* Object to hold EasyRTC Utility methods and classes.
*
* @class
*/
var eu = module.exports;
/**
* Disconnects socket. Failure results in a debug level log message.
*
* @param {Object} socket Socket.io connection object.
*/
eu.socketDisconnect = function(socket) {
try {
socket.disconnect();
} catch(err) {
eu.log("debug", "Socket disconnection command failed. Socket may already be disconnected.");
}
};
/**
* Custom Error Object for EasyRTC Server Errors.
*
* @extends Error
* @param {string} msg Text message describing the error.
* @returns {Error}
*/
eu.ServerError = function(msg) {
eu.ServerError.super_.call(this, msg, this.constructor);
};
util.inherits(eu.ServerError, g.AbstractError);
eu.ServerError.prototype.name = "Server Error";
eu.ServerError.prototype.errorLevel = "error";
/**
* Custom Error Object for EasyRTC Application Errors.
*
* @extends Error
* @param {string} msg Text message describing the error.
* @returns {Error}
*/
eu.ApplicationError = function(msg) {
eu.ApplicationError.super_.call(this, msg, this.constructor);
};
util.inherits(eu.ApplicationError, g.AbstractError);
eu.ApplicationError.prototype.name = "Application Error";
eu.ApplicationError.prototype.errorLevel = "error";
/**
* Custom Error Object for Connection Errors.
*
* @extends Error
* @param {string} msg Text message describing the error.
* @returns {Error}
*/
eu.ConnectionError = function(msg) {
eu.ConnectionError.super_.call(this, msg, this.constructor);
};
util.inherits(eu.ConnectionError, g.AbstractError);
eu.ConnectionError.prototype.name = "Connection Error";
eu.ConnectionError.prototype.errorLevel = "error";
/**
* Custom Error Object for EasyRTC Server Warnings.
*
* @extends Error
* @param {string} msg Text message describing the error.
* @returns {Error}
*/
eu.ServerWarning = function(msg) {
eu.ServerWarning.super_.call(this, msg, this.constructor);
};
util.inherits(eu.ServerWarning, g.AbstractError);
eu.ServerWarning.prototype.name = "Server Warning";
eu.ServerWarning.prototype.errorLevel = "warning";
/**
* Custom Error Object for EasyRTC Application Warnings.
*
* @extends Error
* @param {string} msg Text message describing the error.
* @returns {Error}
*/
eu.ApplicationWarning = function(msg) {
eu.ApplicationWarning.super_.call(this, msg, this.constructor);
};
util.inherits(eu.ApplicationWarning, g.AbstractError);
eu.ApplicationWarning.prototype.name = "Application Warning";
eu.ApplicationWarning.prototype.errorLevel = "warning";
/**
* Custom Error Object for Connection Warnings.
*
* @extends Error
* @param {string} msg Text message describing the error.
* @returns {Error}
*/
eu.ConnectionWarning = function(msg) {
eu.ConnectionWarning.super_.call(this, msg, this.constructor);
};
util.inherits(eu.ConnectionWarning, g.AbstractError);
eu.ConnectionWarning.prototype.name = "Connection Warning";
eu.ConnectionWarning.prototype.errorLevel = "warning";
/**
* Determines if an Error object is an instance of ApplicationError, ConnectionError, or ServerError. If it is, it will return true.
*
* @param {Error} err
* @return {Boolean}
*/
eu.isError = function(err) {
if (err && ((err instanceof eu.ConnectionError)||(err instanceof eu.ApplicationError)||(err instanceof eu.ServerError)||(err instanceof Error))) {
return true;
} else {
return false;
}
};
/**
* Determines if an Error object is an instance of ApplicationWarning, ConnectionWarning, or ServerWarning. If it is, it will return true.
*
* @param {Error} err
* @return {Boolean}
*/
eu.isWarning = function(err) {
if (err && ((err instanceof eu.ConnectionWarning)||(err instanceof eu.ApplicationWarning)||(err instanceof eu.ServerWarning))) {
return true;
} else {
return false;
}
};
/**
* Returns a random available easyrtcid.
*
* @return {String} Available easyrtcid. A unique identifier for an EasyRTC connection.
*/
eu.getAvailableEasyrtcid = function() {
var newEasyrtcid = "";
var easyrtcidExists = false;
do {
newEasyrtcid = g.randomString();
easyrtcidExists = false;
for (var key in e.app) {
if (e.app[key].connection[newEasyrtcid]) {
easyrtcidExists = true;
break;
}
}
} while (easyrtcidExists);
return newEasyrtcid;
};