HEX
Server: nginx/1.24.0
System: Linux nowruzgan 6.8.0-57-generic #59-Ubuntu SMP PREEMPT_DYNAMIC Sat Mar 15 17:40:59 UTC 2025 x86_64
User: babak (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/dev/farhangmoaser/web/connectors/redis.js
/**
 * Redis Connector
 * Version: 0.1
 * Author: Babak Vandad
 *
 * Manages a singleton connection to MySQL
 */

var redis = require('redis');
var config = require('../config.js');

var client;

/**
 * Attempts to connect to Redis.
 * @param  {Function} callback Callback function
 */
function connect(callback) {

	var host = config.read('redis.host') || 'localhost';
	var port = config.read('redis.port') || 6379;

	if(config.read('redis.username'))
		client = redis.createClient(`redis:\/\/${config.read('redis.username')}:${config.read('redis.password')}@${host}:${port}`);
	else
		client = redis.createClient(port, host);

	client.on('connect', function(){
		// console.log('redis db connected.');
		if(callback)
			callback(client);
	});

	client.on('errpr', function(){
		console.log('redis db error.');
	});
}

/**
 * If a connection request has been issued, returns the client object.
 * Otherwise connects to the db.
 * IMPORTANT: If there is an ongoing attemp, it returns the client object, which does not have a stablished connection yet.
 * @param  {Function} callback Callback function
 */
exports.connect = function(callback){
	if(client){
		if(callback)
			process.nextTick(function (){
				callback(client);
			});
	}
	else
		connect(callback);
};

exports.connectPromise = function(){
	return new Promise((resolve, reject) => {
		if(client)
			process.nextTick(() => resolve(client));
		else
			connect(resolve);
	});
};

/**
 * Returns current mysql object synchronously whether connected or not.
 * @return {Object} MySQL connection object
 */
exports.client = function() {
	return client;
};