X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=src%2FwebTorrentNode.js;h=bc77872ceae73e83e290e8d6566e9479e585c75e;hb=4634cfb353d47a381e19c72f6887fc68f6fbc4bf;hp=03bff780381c69619e01149748a9bdc798a31353;hpb=8c308c2bf7f658945d80be9d5880361238635f5b;p=github%2FChocobozzz%2FPeerTube.git diff --git a/src/webTorrentNode.js b/src/webTorrentNode.js index 03bff7803..bc77872ce 100644 --- a/src/webTorrentNode.js +++ b/src/webTorrentNode.js @@ -8,16 +8,8 @@ var logger = require('./logger') - var host - var port - - try { - host = config.get('webserver.host') - port = config.get('webserver.port') - } catch (e) { - host = 'client' - port = 1 - } + var host = config.get('webserver.host') + var port = config.get('webserver.port') var nodeKey = 'webtorrentnode' + port var processKey = 'webtorrent' + port @@ -33,15 +25,41 @@ // Useful to kill it webtorrentnode.app = null - webtorrentnode.create = function (callback) { + webtorrentnode.create = function (options, callback) { + if (typeof options === 'function') { + callback = options + options = {} + } + + // Override options + if (options.host) host = options.host + if (options.port) { + port = options.port + nodeKey = 'webtorrentnode' + port + processKey = 'webtorrent' + port + ipc.config.id = nodeKey + } + ipc.serve(function () { if (!webtorrentnode.silent) logger.info('IPC server ready.') + // Run a timeout of 30s after which we exit the process + var timeout_webtorrent_process = setTimeout(function () { + logger.error('Timeout : cannot run the webtorrent process. Please ensure you have electron-prebuilt npm package installed with xvfb-run.') + process.exit() + }, 30000) + ipc.server.on(processKey + '.ready', function () { if (!webtorrentnode.silent) logger.info('Webtorrent process ready.') + clearTimeout(timeout_webtorrent_process) callback() }) + ipc.server.on(processKey + '.exception', function (data) { + logger.error('Received exception error from webtorrent process.', { exception: data.exception }) + process.exit() + }) + var webtorrent_process = spawn(__dirname + '/webtorrent.js', host, port, { detached: true }) webtorrent_process.stderr.on('data', function (data) { // logger.debug('Webtorrent process stderr: ', data.toString()) @@ -51,15 +69,6 @@ // logger.debug('Webtorrent process:', data.toString()) }) - function exitChildProcess () { - if (!webtorrentnode.silent) logger.info('Gracefully exit child') - process.kill(-webtorrent_process.pid) - process.exit(0) - } - - process.on('SIGINT', exitChildProcess) - process.on('SIGTERM', exitChildProcess) - webtorrentnode.app = webtorrent_process }) @@ -79,7 +88,8 @@ if (!webtorrentnode.silent) logger.debug('Node wants to seed ' + data._id) // Finish signal - ipc.server.on(nodeKey + '.seedDone.' + data._id, function (received) { + var event_key = nodeKey + '.seedDone.' + data._id + ipc.server.on(event_key, function listener (received) { if (!webtorrentnode.silent) logger.debug('Process seeded torrent ' + received.magnetUri) // This is a fake object, we just use the magnetUri in this project @@ -87,6 +97,7 @@ magnetURI: received.magnetUri } + ipc.server.off(event_key) callback(torrent) }) @@ -104,7 +115,8 @@ if (!webtorrentnode.silent) logger.debug('Node wants to add ' + data._id) // Finish signal - ipc.server.on(nodeKey + '.addDone.' + data._id, function (received) { + var event_key = nodeKey + '.addDone.' + data._id + ipc.server.on(event_key, function (received) { if (!webtorrentnode.silent) logger.debug('Process added torrent') // This is a fake object, we just use the magnetUri in this project @@ -112,6 +124,7 @@ files: received.files } + ipc.server.off(event_key) callback(torrent) }) @@ -129,12 +142,14 @@ if (!webtorrentnode.silent) logger.debug('Node wants to stop seeding ' + data._id) // Finish signal - ipc.server.on(nodeKey + '.removeDone.' + data._id, function (received) { + var event_key = nodeKey + '.removeDone.' + data._id + ipc.server.on(event_key, function (received) { if (!webtorrentnode.silent) logger.debug('Process removed torrent ' + data._id) var err = null if (received.err) err = received.err + ipc.server.off(event_key) callback(err) })