Skip to content
Snippets Groups Projects
Commit f135d120 authored by Cédric Moreau's avatar Cédric Moreau
Browse files

Fix #228 do not crash if a network interface is not available

parent 4beae427
No related branches found
No related tags found
No related merge requests found
......@@ -2,6 +2,7 @@ var http = require('http');
var express = require('express');
var async = require('async');
var log4js = require('log4js');
var co = require('co');
var Q = require('q');
var cors = require('express-cors');
var es = require('event-stream');
......@@ -122,18 +123,24 @@ module.exports = function(server, interfaces, httpLogs) {
var httpServers = [];
return interfaces.reduce(function(promise, netInterface) {
return promise.then(function() {
return listenInterface(app, netInterface.ip, netInterface.port)
.then(function(httpServer){
return co(function *() {
for (let i = 0, len = interfaces.length; i < len; i++) {
let netInterface = interfaces[i];
try {
let httpServer = yield listenInterface(app, netInterface.ip, netInterface.port);
listenWebSocket(server, httpServer);
httpServers.push(httpServer);
logger.info('uCoin server listening on ' + netInterface.ip + ' port ' + netInterface.port);
});
});
}, Q.resolve())
} catch (err) {
logger.error('uCoin server cannot listen on ' + netInterface.ip + ' port ' + netInterface.port);
}
}
.then(function(){
if (httpServers.length == 0){
throw 'uCoin does not have any interface to listen to.';
}
// Return API
return {
closeConnections: function () {
......@@ -162,9 +169,9 @@ function listenInterface(app, netInterface, port) {
"use strict";
return Q.Promise(function(resolve, reject){
var httpServer = http.createServer(app);
httpServer.listen(port, netInterface, function(err){
err ? reject(err) : resolve(httpServer);
});
httpServer.on('error', reject);
httpServer.on('listening', resolve.bind(this, httpServer));
httpServer.listen(port, netInterface);
});
}
......@@ -174,6 +181,7 @@ function listenWebSocket(server, httpServer) {
var currentBlock = {};
var blockSocket = io
.of('/websocket/block')
.on('error', (err) => logger.error(err))
.on('connection', function (socket) {
socket.emit('block', currentBlock);
});
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment