|
@ -12,12 +12,6 @@ let bodyParser = require('body-parser');
|
|
let log = require('./util/log');
|
|
let log = require('./util/log');
|
|
let redis = require('redis');
|
|
let redis = require('redis');
|
|
|
|
|
|
// IoC
|
|
|
|
var bearcat = require('bearcat');
|
|
|
|
var contextPath = require.resolve('./context.json');
|
|
|
|
global.bearcat = bearcat; // make bearcat global, for `bearcat.module()`
|
|
|
|
bearcat.createApp([contextPath]);
|
|
|
|
|
|
|
|
// server configurations
|
|
// server configurations
|
|
let APIv1 = require('./include/endpoints').APIv1;
|
|
let APIv1 = require('./include/endpoints').APIv1;
|
|
let PAGES = require('./include/endpoints').PAGES;
|
|
let PAGES = require('./include/endpoints').PAGES;
|
|
@ -38,97 +32,95 @@ let management = require('./endpoints/management.endpoint');
|
|
// handlers
|
|
// handlers
|
|
let SocketHandler = require('./handlers/socket.handler');
|
|
let SocketHandler = require('./handlers/socket.handler');
|
|
|
|
|
|
bearcat.start(function () {
|
|
|
|
// initialize express application
|
|
|
|
let app = express();
|
|
|
|
app.set('port', config.serverPort);
|
|
|
|
|
|
|
|
// view engine
|
|
|
|
app.set('views', path.join(__dirname, 'views'));
|
|
|
|
app.set('view engine', 'jade');
|
|
|
|
|
|
|
|
// logger, body parser, cookie parser and view path
|
|
|
|
app.use(favicon(__dirname + '/public/favicon.ico', null));
|
|
|
|
app.use(logger('dev'));
|
|
|
|
app.use(bodyParser.json());
|
|
|
|
app.use(bodyParser.urlencoded({extended: true}));
|
|
|
|
app.use(cookieParser());
|
|
|
|
app.use(express.static(path.join(__dirname, 'public')));
|
|
|
|
|
|
|
|
// pages
|
|
|
|
app.use(PAGES.Home.Index, index);
|
|
|
|
app.use(PAGES.Socket.Index, socket);
|
|
|
|
|
|
|
|
// setup rest endpoints
|
|
|
|
app.use(APIv1.Application.Base, application);
|
|
|
|
app.use(APIv1.Chats.Base, chats);
|
|
|
|
app.use(APIv1.Users.Base, users);
|
|
|
|
app.use(APIv1.Groups.Base, groups);
|
|
|
|
app.use(APIv1.Management.Base, management);
|
|
|
|
|
|
|
|
// error handler, only handle the sync call exception
|
|
|
|
app.use(function (err, req, res, next) {
|
|
|
|
if (err) {
|
|
|
|
res
|
|
|
|
.status(err.httpStatus || 500)
|
|
|
|
.send({message: err.message});
|
|
|
|
}
|
|
|
|
|
|
// initialize express application
|
|
|
|
let app = express();
|
|
|
|
app.set('port', config.serverPort);
|
|
|
|
|
|
next(err);
|
|
|
|
});
|
|
|
|
|
|
// view engine
|
|
|
|
app.set('views', path.join(__dirname, 'views'));
|
|
|
|
app.set('view engine', 'jade');
|
|
|
|
|
|
// In development mode, error handler will print stacktrace, only handle the sync call exception
|
|
|
|
if (app.get('env') === 'development') {
|
|
|
|
app.use(function (err, req, res, next) {
|
|
|
|
log.error(err);
|
|
|
|
|
|
// logger, body parser, cookie parser and view path
|
|
|
|
app.use(favicon(__dirname + '/public/favicon.ico', null));
|
|
|
|
app.use(logger('dev'));
|
|
|
|
app.use(bodyParser.json());
|
|
|
|
app.use(bodyParser.urlencoded({extended: true}));
|
|
|
|
app.use(cookieParser());
|
|
|
|
app.use(express.static(path.join(__dirname, 'public')));
|
|
|
|
|
|
next(err);
|
|
|
|
});
|
|
|
|
|
|
// pages
|
|
|
|
app.use(PAGES.Home.Index, index);
|
|
|
|
app.use(PAGES.Socket.Index, socket);
|
|
|
|
|
|
|
|
// setup rest endpoints
|
|
|
|
app.use(APIv1.Application.Base, application);
|
|
|
|
app.use(APIv1.Chats.Base, chats);
|
|
|
|
app.use(APIv1.Users.Base, users);
|
|
|
|
app.use(APIv1.Groups.Base, groups);
|
|
|
|
app.use(APIv1.Management.Base, management);
|
|
|
|
|
|
|
|
// error handler, only handle the sync call exception
|
|
|
|
app.use(function (err, req, res, next) {
|
|
|
|
if (err) {
|
|
|
|
res
|
|
|
|
.status(err.httpStatus || 500)
|
|
|
|
.send({message: err.message});
|
|
}
|
|
}
|
|
|
|
|
|
// only handle the sync call exception
|
|
|
|
process.on('uncaughtException', function (err) {
|
|
|
|
console.error(err);
|
|
|
|
});
|
|
|
|
|
|
next(err);
|
|
|
|
});
|
|
|
|
|
|
// now enable http server and socket.io
|
|
|
|
let server = require('http').createServer(app);
|
|
|
|
let io = require('socket.io').listen(server);
|
|
|
|
|
|
|
|
server.listen(config.serverPort);
|
|
|
|
|
|
|
|
// event listener for HTTP server "error" event
|
|
|
|
server.on('error', function (error) {
|
|
|
|
if (error.syscall !== 'listen') throw error;
|
|
|
|
|
|
|
|
let 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;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
// In development mode, error handler will print stacktrace, only handle the sync call exception
|
|
|
|
if (app.get('env') === 'development') {
|
|
|
|
app.use(function (err, req, res, next) {
|
|
|
|
log.error(err);
|
|
|
|
|
|
// event listener for HTTP server "listening" event
|
|
|
|
server.on('listening', function onListening() {
|
|
|
|
let addr = server.address();
|
|
|
|
let bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port;
|
|
|
|
|
|
next(err);
|
|
});
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
// only handle the sync call exception
|
|
|
|
process.on('uncaughtException', function (err) {
|
|
|
|
console.error(err);
|
|
|
|
});
|
|
|
|
|
|
|
|
// now enable http server and socket.io
|
|
|
|
let server = require('http').createServer(app);
|
|
|
|
let io = require('socket.io').listen(server);
|
|
|
|
|
|
|
|
server.listen(config.serverPort);
|
|
|
|
|
|
|
|
// event listener for HTTP server "error" event
|
|
|
|
server.on('error', function (error) {
|
|
|
|
if (error.syscall !== 'listen') throw error;
|
|
|
|
|
|
|
|
let 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;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
let socketHandler = new SocketHandler(io);
|
|
|
|
socketHandler.start();
|
|
|
|
|
|
// event listener for HTTP server "listening" event
|
|
|
|
server.on('listening', function onListening() {
|
|
|
|
let addr = server.address();
|
|
|
|
let bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port;
|
|
|
|
|
|
log.info('Starting IM server, version ' + config.version + ', running on port ' + server.address().port + ', ' + new Date().toLocaleString());
|
|
|
|
log.info('Configuration profile: ' + configFile.split('.')[1]);
|
|
|
|
|
|
log.info("WebSocket listening on ", addr.address, bind);
|
|
|
|
});
|
|
|
|
|
|
|
|
let socketHandler = new SocketHandler(io);
|
|
|
|
socketHandler.start();
|
|
|
|
|
|
});
|
|
|
|
|
|
log.info('Starting IM server, version ' + config.version + ', running on port ' + server.address().port + ', ' + new Date().toLocaleString());
|
|
|
|
log.info('Configuration profile: ' + configFile.split('.')[1]);
|