File: /var/dev/farhangmoaser/web/bin/www
#!/usr/bin/env node
/**
 * Module dependencies.
 */
var app = require('../app');
var debug = require('debug')('google-test:server');
var http = require('http');
var redis = require('../connectors/redis');
var config = require('../config');
var startup = require('../helpers/startup');
var db = require('../connectors/'+config.read('db.engine'));
/**
 * Get port from environment and store in Express.
 */
var port = config.read('backend.port');
app.set('port', port);
/**
 * Create HTTP server.
 */
var server = http.createServer(app);
/**
 * Connecting to databases and listen on provided port.
 * Only to check!
 */
(async ()=> {
  await db.getConnectionPromise();
  await redis.connectPromise();
	startup.start(failed => {
		if(failed) process.exit(); //TODO: shutdown gracefull!
		if(config.read('backend.host'))
			server.listen(port, config.read('backend.host'));
		else
			server.listen(port);
	});
})();
// db.getConnection(function(){
	// redis.connect(function(){
		// startup.start(function(failed){
		// 	if(failed) process.exit(); //TODO: shutdown gracefull!
		// 	if(config.read('backend.host'))
		// 		server.listen(port, config.read('backend.host'));
		// 	else
		// 		server.listen(port);
		// });
	// });
// });
server.on('error', onError);
server.on('listening', onListening);
/**
 * Event listener for HTTP server "error" event.
 */
function onError(error) {
	if (error.syscall !== 'listen') {
		throw error;
	}
	var bind = typeof port === 'string'
		? 'Pipe ' + port
		: 'Port ' + port;
	// handle specific listen errors with friendly messages
	switch (error.code) {
		case 'EACCES':
			console.error(bind + ' requires elevated privileges');
			process.exit(1);
			break;
		case 'EADDRINUSE':
			console.error(bind + ' is already in use');
			process.exit(1);
			break;
		default:
			throw error;
	}
}
/**
 * Event listener for HTTP server "listening" event.
 */
function onListening() {
	var addr = server.address();
	var bind = typeof addr === 'string'
		? 'pipe ' + addr
		: 'port ' + addr.port;
	debug('Listening on ' + bind);
	console.log('listening on ' + bind);
}