]>
git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - src/webTorrentNode.js
03bff780381c69619e01149748a9bdc798a31353
4 var spawn
= require('electron-spawn')
5 var config
= require('config')
6 var ipc
= require('node-ipc')
7 var pathUtils
= require('path')
9 var logger
= require('./logger')
15 host
= config
.get('webserver.host')
16 port
= config
.get('webserver.port')
22 var nodeKey
= 'webtorrentnode' + port
23 var processKey
= 'webtorrent' + port
25 ipc
.config
.silent
= true
26 ipc
.config
.id
= nodeKey
28 var webtorrentnode
= {}
30 // Useful for beautiful tests
31 webtorrentnode
.silent
= false
34 webtorrentnode
.app
= null
36 webtorrentnode
.create = function (callback
) {
37 ipc
.serve(function () {
38 if (!webtorrentnode
.silent
) logger
.info('IPC server ready.')
40 ipc
.server
.on(processKey
+ '.ready', function () {
41 if (!webtorrentnode
.silent
) logger
.info('Webtorrent process ready.')
45 var webtorrent_process
= spawn(__dirname
+ '/webtorrent.js', host
, port
, { detached: true })
46 webtorrent_process
.stderr
.on('data', function (data
) {
47 // logger.debug('Webtorrent process stderr: ', data.toString())
50 webtorrent_process
.stdout
.on('data', function (data
) {
51 // logger.debug('Webtorrent process:', data.toString())
54 function exitChildProcess () {
55 if (!webtorrentnode
.silent
) logger
.info('Gracefully exit child')
56 process
.kill(-webtorrent_process
.pid
)
60 process
.on('SIGINT', exitChildProcess
)
61 process
.on('SIGTERM', exitChildProcess
)
63 webtorrentnode
.app
= webtorrent_process
69 webtorrentnode
.seed = function (path
, callback
) {
70 var extension
= pathUtils
.extname(path
)
71 var basename
= pathUtils
.basename(path
, extension
)
79 if (!webtorrentnode
.silent
) logger
.debug('Node wants to seed ' + data
._id
)
82 ipc
.server
.on(nodeKey
+ '.seedDone.' + data
._id
, function (received
) {
83 if (!webtorrentnode
.silent
) logger
.debug('Process seeded torrent ' + received
.magnetUri
)
85 // This is a fake object, we just use the magnetUri in this project
87 magnetURI: received
.magnetUri
93 ipc
.server
.broadcast(processKey
+ '.seed', data
)
96 webtorrentnode
.add = function (magnetUri
, callback
) {
104 if (!webtorrentnode
.silent
) logger
.debug('Node wants to add ' + data
._id
)
107 ipc
.server
.on(nodeKey
+ '.addDone.' + data
._id
, function (received
) {
108 if (!webtorrentnode
.silent
) logger
.debug('Process added torrent')
110 // This is a fake object, we just use the magnetUri in this project
112 files: received
.files
118 ipc
.server
.broadcast(processKey
+ '.add', data
)
121 webtorrentnode
.remove = function (magnetUri
, callback
) {
129 if (!webtorrentnode
.silent
) logger
.debug('Node wants to stop seeding ' + data
._id
)
132 ipc
.server
.on(nodeKey
+ '.removeDone.' + data
._id
, function (received
) {
133 if (!webtorrentnode
.silent
) logger
.debug('Process removed torrent ' + data
._id
)
136 if (received
.err
) err
= received
.err
141 ipc
.server
.broadcast(processKey
+ '.remove', data
)
144 module
.exports
= webtorrentnode