From c5a8be2b6282d2042e469e1b7c1e7ce8795c026f Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Sat, 6 Feb 2016 16:22:39 +0100 Subject: [PATCH] Rename webtorrent files (process/node) --- controllers/api/v1/videos.js | 2 +- lib/videos.js | 2 +- lib/webTorrentNode.js | 161 ---------------------------- lib/webtorrent.js | 198 +++++++++++++++++++++++------------ lib/webtorrentProcess.js | 95 +++++++++++++++++ server.js | 2 +- tests/api/multiplePods.js | 2 +- tests/api/singlePod.js | 2 +- 8 files changed, 232 insertions(+), 232 deletions(-) delete mode 100644 lib/webTorrentNode.js create mode 100644 lib/webtorrentProcess.js diff --git a/controllers/api/v1/videos.js b/controllers/api/v1/videos.js index eec95c801..7dccfa7c3 100644 --- a/controllers/api/v1/videos.js +++ b/controllers/api/v1/videos.js @@ -13,7 +13,7 @@ var reqValidator = middleware.reqValidators.videos var Videos = require('../../../models/videos') // model var videos = require('../../../lib/videos') - var webtorrent = require('../../../lib/webTorrentNode') + var webtorrent = require('../../../lib/webtorrent') var router = express.Router() var uploads = config.get('storage.uploads') diff --git a/lib/videos.js b/lib/videos.js index 0da7715c4..1bb6f2493 100644 --- a/lib/videos.js +++ b/lib/videos.js @@ -3,7 +3,7 @@ var async = require('async') var config = require('config') - var webtorrent = require('../lib/webTorrentNode') + var webtorrent = require('../lib/webtorrent') var logger = require('../helpers/logger') var Videos = require('../models/videos') diff --git a/lib/webTorrentNode.js b/lib/webTorrentNode.js deleted file mode 100644 index 69fa6b012..000000000 --- a/lib/webTorrentNode.js +++ /dev/null @@ -1,161 +0,0 @@ -;(function () { - 'use strict' - - var config = require('config') - var ipc = require('node-ipc') - var pathUtils = require('path') - var spawn = require('electron-spawn') - - var logger = require('../helpers/logger') - - var host = config.get('webserver.host') - var port = config.get('webserver.port') - var nodeKey = 'webtorrentnode' + port - var processKey = 'webtorrent' + port - ipc.config.silent = true - ipc.config.id = nodeKey - - var webtorrentnode = { - add: add, - app: null, // Pid of the app - create: create, - remove: remove, - seed: seed, - silent: false // Useful for beautiful tests - } - - function create (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()) - }) - - webtorrent_process.stdout.on('data', function (data) { - // logger.debug('Webtorrent process:', data.toString()) - }) - - webtorrentnode.app = webtorrent_process - }) - - ipc.server.start() - } - - function seed (path, callback) { - var extension = pathUtils.extname(path) - var basename = pathUtils.basename(path, extension) - var data = { - _id: basename, - args: { - path: path - } - } - - if (!webtorrentnode.silent) logger.debug('Node wants to seed %s.', data._id) - - // Finish signal - var event_key = nodeKey + '.seedDone.' + data._id - ipc.server.on(event_key, function listener (received) { - if (!webtorrentnode.silent) logger.debug('Process seeded torrent %s.', received.magnetUri) - - // This is a fake object, we just use the magnetUri in this project - var torrent = { - magnetURI: received.magnetUri - } - - ipc.server.off(event_key) - callback(torrent) - }) - - ipc.server.broadcast(processKey + '.seed', data) - } - - function add (magnetUri, callback) { - var data = { - _id: magnetUri, - args: { - magnetUri: magnetUri - } - } - - if (!webtorrentnode.silent) logger.debug('Node wants to add ' + data._id) - - // Finish signal - 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 - var torrent = { - files: received.files - } - - ipc.server.off(event_key) - callback(torrent) - }) - - ipc.server.broadcast(processKey + '.add', data) - } - - function remove (magnetUri, callback) { - var data = { - _id: magnetUri, - args: { - magnetUri: magnetUri - } - } - - if (!webtorrentnode.silent) logger.debug('Node wants to stop seeding %s.', data._id) - - // Finish signal - var event_key = nodeKey + '.removeDone.' + data._id - ipc.server.on(event_key, function (received) { - if (!webtorrentnode.silent) logger.debug('Process removed torrent %s.', data._id) - - var err = null - if (received.err) err = received.err - - ipc.server.off(event_key) - callback(err) - }) - - ipc.server.broadcast(processKey + '.remove', data) - } - - // --------------------------------------------------------------------------- - - module.exports = webtorrentnode -})() diff --git a/lib/webtorrent.js b/lib/webtorrent.js index d0db6e066..7cd38156c 100644 --- a/lib/webtorrent.js +++ b/lib/webtorrent.js @@ -1,92 +1,158 @@ ;(function () { 'use strict' - function webtorrent (args) { - var WebTorrent = require('webtorrent') - var ipc = require('node-ipc') + var config = require('config') + var ipc = require('node-ipc') + var pathUtils = require('path') + var spawn = require('electron-spawn') - if (args.length !== 3) { - console.log('Wrong arguments number: ' + args.length + '/3') - process.exit(-1) + var logger = require('../helpers/logger') + + var host = config.get('webserver.host') + var port = config.get('webserver.port') + var nodeKey = 'webtorrentnode' + port + var processKey = 'webtorrentprocess' + port + ipc.config.silent = true + ipc.config.id = nodeKey + + var webtorrent = { + add: add, + app: null, // Pid of the app + create: create, + remove: remove, + seed: seed, + silent: false // Useful for beautiful tests + } + + function create (options, callback) { + if (typeof options === 'function') { + callback = options + options = {} } - var host = args[1] - var port = args[2] - var nodeKey = 'webtorrentnode' + port - var processKey = 'webtorrent' + port + // Override options + if (options.host) host = options.host + if (options.port) { + port = options.port + nodeKey = 'webtorrentnode' + port + processKey = 'webtorrentprocess' + port + ipc.config.id = nodeKey + } - ipc.config.silent = true - ipc.config.id = processKey + ipc.serve(function () { + if (!webtorrent.silent) logger.info('IPC server ready.') - if (host === 'client' && port === '1') global.WEBTORRENT_ANNOUNCE = [] - else global.WEBTORRENT_ANNOUNCE = 'ws://' + host + ':' + port + '/tracker/socket' - var wt = new WebTorrent({ dht: false }) + // 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) - function seed (data) { - var args = data.args - var path = args.path - var _id = data._id - - wt.seed(path, { announceList: '' }, function (torrent) { - var to_send = { - magnetUri: torrent.magnetURI - } - - ipc.of[nodeKey].emit(nodeKey + '.seedDone.' + _id, to_send) + ipc.server.on(processKey + '.ready', function () { + if (!webtorrent.silent) logger.info('Webtorrent process ready.') + clearTimeout(timeout_webtorrent_process) + callback() }) - } - function add (data) { - var args = data.args - var magnetUri = args.magnetUri - var _id = data._id - - wt.add(magnetUri, function (torrent) { - var to_send = { - files: [] - } - - torrent.files.forEach(function (file) { - to_send.files.push({ path: file.path }) - }) - - ipc.of[nodeKey].emit(nodeKey + '.addDone.' + _id, to_send) + ipc.server.on(processKey + '.exception', function (data) { + logger.error('Received exception error from webtorrent process.', { exception: data.exception }) + process.exit() }) - } - function remove (data) { - var args = data.args - var magnetUri = args.magnetUri - var _id = data._id + var webtorrent_process = spawn(__dirname + '/webtorrentProcess.js', host, port, { detached: true }) + webtorrent_process.stderr.on('data', function (data) { + // logger.debug('Webtorrent process stderr: ', data.toString()) + }) - try { - wt.remove(magnetUri, callback) - } catch (err) { - console.log('Cannot remove the torrent from WebTorrent.') - return callback(null) - } + webtorrent_process.stdout.on('data', function (data) { + // logger.debug('Webtorrent process:', data.toString()) + }) - function callback () { - var to_send = {} - ipc.of[nodeKey].emit(nodeKey + '.removeDone.' + _id, to_send) + webtorrent.app = webtorrent_process + }) + + ipc.server.start() + } + + function seed (path, callback) { + var extension = pathUtils.extname(path) + var basename = pathUtils.basename(path, extension) + var data = { + _id: basename, + args: { + path: path } } - console.log('Configuration: ' + host + ':' + port) - console.log('Connecting to IPC...') + if (!webtorrent.silent) logger.debug('Node wants to seed %s.', data._id) - ipc.connectTo(nodeKey, function () { - ipc.of[nodeKey].on(processKey + '.seed', seed) - ipc.of[nodeKey].on(processKey + '.add', add) - ipc.of[nodeKey].on(processKey + '.remove', remove) + // Finish signal + var event_key = nodeKey + '.seedDone.' + data._id + ipc.server.on(event_key, function listener (received) { + if (!webtorrent.silent) logger.debug('Process seeded torrent %s.', received.magnetUri) - ipc.of[nodeKey].emit(processKey + '.ready') - console.log('Ready.') + // This is a fake object, we just use the magnetUri in this project + var torrent = { + magnetURI: received.magnetUri + } + + ipc.server.off(event_key) + callback(torrent) }) - process.on('uncaughtException', function (e) { - ipc.of[nodeKey].emit(processKey + '.exception', { exception: e }) + ipc.server.broadcast(processKey + '.seed', data) + } + + function add (magnetUri, callback) { + var data = { + _id: magnetUri, + args: { + magnetUri: magnetUri + } + } + + if (!webtorrent.silent) logger.debug('Node wants to add ' + data._id) + + // Finish signal + var event_key = nodeKey + '.addDone.' + data._id + ipc.server.on(event_key, function (received) { + if (!webtorrent.silent) logger.debug('Process added torrent.') + + // This is a fake object, we just use the magnetUri in this project + var torrent = { + files: received.files + } + + ipc.server.off(event_key) + callback(torrent) }) + + ipc.server.broadcast(processKey + '.add', data) + } + + function remove (magnetUri, callback) { + var data = { + _id: magnetUri, + args: { + magnetUri: magnetUri + } + } + + if (!webtorrent.silent) logger.debug('Node wants to stop seeding %s.', data._id) + + // Finish signal + var event_key = nodeKey + '.removeDone.' + data._id + ipc.server.on(event_key, function (received) { + if (!webtorrent.silent) logger.debug('Process removed torrent %s.', data._id) + + var err = null + if (received.err) err = received.err + + ipc.server.off(event_key) + callback(err) + }) + + ipc.server.broadcast(processKey + '.remove', data) } // --------------------------------------------------------------------------- diff --git a/lib/webtorrentProcess.js b/lib/webtorrentProcess.js new file mode 100644 index 000000000..7dc655f10 --- /dev/null +++ b/lib/webtorrentProcess.js @@ -0,0 +1,95 @@ +;(function () { + 'use strict' + + function webtorrent (args) { + var WebTorrent = require('webtorrent') + var ipc = require('node-ipc') + + if (args.length !== 3) { + console.log('Wrong arguments number: ' + args.length + '/3') + process.exit(-1) + } + + var host = args[1] + var port = args[2] + var nodeKey = 'webtorrentnode' + port + var processKey = 'webtorrentprocess' + port + + ipc.config.silent = true + ipc.config.id = processKey + + if (host === 'client' && port === '1') global.WEBTORRENT_ANNOUNCE = [] + else global.WEBTORRENT_ANNOUNCE = 'ws://' + host + ':' + port + '/tracker/socket' + var wt = new WebTorrent({ dht: false }) + + function seed (data) { + var args = data.args + var path = args.path + var _id = data._id + + wt.seed(path, { announceList: '' }, function (torrent) { + var to_send = { + magnetUri: torrent.magnetURI + } + + ipc.of[nodeKey].emit(nodeKey + '.seedDone.' + _id, to_send) + }) + } + + function add (data) { + var args = data.args + var magnetUri = args.magnetUri + var _id = data._id + + wt.add(magnetUri, function (torrent) { + var to_send = { + files: [] + } + + torrent.files.forEach(function (file) { + to_send.files.push({ path: file.path }) + }) + + ipc.of[nodeKey].emit(nodeKey + '.addDone.' + _id, to_send) + }) + } + + function remove (data) { + var args = data.args + var magnetUri = args.magnetUri + var _id = data._id + + try { + wt.remove(magnetUri, callback) + } catch (err) { + console.log('Cannot remove the torrent from WebTorrent.') + return callback(null) + } + + function callback () { + var to_send = {} + ipc.of[nodeKey].emit(nodeKey + '.removeDone.' + _id, to_send) + } + } + + console.log('Configuration: ' + host + ':' + port) + console.log('Connecting to IPC...') + + ipc.connectTo(nodeKey, function () { + ipc.of[nodeKey].on(processKey + '.seed', seed) + ipc.of[nodeKey].on(processKey + '.add', add) + ipc.of[nodeKey].on(processKey + '.remove', remove) + + ipc.of[nodeKey].emit(processKey + '.ready') + console.log('Ready.') + }) + + process.on('uncaughtException', function (e) { + ipc.of[nodeKey].emit(processKey + '.exception', { exception: e }) + }) + } + + // --------------------------------------------------------------------------- + + module.exports = webtorrent +})() diff --git a/server.js b/server.js index b8674b0b5..c40513047 100644 --- a/server.js +++ b/server.js @@ -37,7 +37,7 @@ var routes = require('./controllers') var utils = require('./helpers/utils') var videos = require('./lib/videos') - var webtorrent = require('./lib/webTorrentNode') + var webtorrent = require('./lib/webtorrent') // Get configurations var port = config.get('listen.port') diff --git a/tests/api/multiplePods.js b/tests/api/multiplePods.js index c27f7121e..5070b450a 100644 --- a/tests/api/multiplePods.js +++ b/tests/api/multiplePods.js @@ -6,7 +6,7 @@ var expect = chai.expect var utils = require('./utils') - var webtorrent = require(__dirname + '/../../lib/webTorrentNode') + var webtorrent = require(__dirname + '/../../lib/webtorrent') webtorrent.silent = true describe('Test multiple pods', function () { diff --git a/tests/api/singlePod.js b/tests/api/singlePod.js index 7621d766c..e5337256b 100644 --- a/tests/api/singlePod.js +++ b/tests/api/singlePod.js @@ -6,7 +6,7 @@ var expect = chai.expect var fs = require('fs') - var webtorrent = require(__dirname + '/../../lib/webTorrentNode') + var webtorrent = require(__dirname + '/../../lib/webtorrent') webtorrent.silent = true var utils = require('./utils')