feat(p2p): peers backup on exit
This commit is contained in:
@ -91,9 +91,16 @@ class App extends Component {
|
||||
|
||||
window.torrentSocket.on('peer', (numOfPeers) => {
|
||||
window.peers = numOfPeers
|
||||
console.log(window.peers)
|
||||
this.forceUpdate()
|
||||
})
|
||||
|
||||
window.torrentSocket.emit('peers', (numOfPeers) => {
|
||||
if(numOfPeers > 0)
|
||||
{
|
||||
window.peers = numOfPeers
|
||||
this.forceUpdate()
|
||||
}
|
||||
})
|
||||
}
|
||||
componentWillUnmount() {
|
||||
appReady = false;
|
||||
|
@ -337,7 +337,7 @@ app.on("ready", () => {
|
||||
}
|
||||
callback.apply(null, arg)
|
||||
})
|
||||
})
|
||||
}, app.getPath("userData"))
|
||||
})
|
||||
});
|
||||
|
||||
|
@ -197,6 +197,13 @@ class p2p {
|
||||
{
|
||||
return this.peers.filter(peer => !!peer.emit)
|
||||
}
|
||||
|
||||
addresses(peers)
|
||||
{
|
||||
if(!peers || !Array.isArray(peers))
|
||||
return
|
||||
return peers.map(peer => ({address: peer.address, port: peer.port}))
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = p2p
|
@ -1,6 +1,7 @@
|
||||
const config = require('./config');
|
||||
const client = new (require('./bt/client'))
|
||||
const spider = new (require('./bt/spider'))(client)
|
||||
const fs = require('fs');
|
||||
const mysql = require('mysql');
|
||||
const getPeersStatisticUDP = require('./bt/udp-tracker-request')
|
||||
const crypto = require('crypto')
|
||||
@ -15,6 +16,7 @@ const natUpnp = require('nat-upnp');
|
||||
//var phantomjs = require('phantomjs-prebuilt')
|
||||
var ipaddr = require('ipaddr.js');
|
||||
//const disk = require('diskusage');
|
||||
const encryptor = require('simple-encryptor')('rats-on-the-boat-enc-v0');
|
||||
const os = require('os');
|
||||
let rootPath = os.platform() === 'win32' ? 'c:' : '/';
|
||||
|
||||
@ -33,7 +35,7 @@ let torrentClientHashMap = {}
|
||||
//server.listen(config.httpPort);
|
||||
//console.log('Listening web server on', config.httpPort, 'port')
|
||||
|
||||
module.exports = function (send, recive)
|
||||
module.exports = function (send, recive, dataDirectory)
|
||||
{
|
||||
|
||||
let torrentsId = 1;
|
||||
@ -255,6 +257,17 @@ setInterval(() => {
|
||||
|
||||
const p2p = new P2PServer(send)
|
||||
p2p.listen()
|
||||
// load initial peers
|
||||
if(dataDirectory && fs.existsSync(dataDirectory + '/peers.p2p'))
|
||||
{
|
||||
const peersEncrypted = fs.readFileSync(dataDirectory + '/peers.p2p', 'utf8')
|
||||
const peers = encryptor.decrypt(peersEncrypted)
|
||||
if(peers && peers.length > 0)
|
||||
{
|
||||
peers.forEach(peer => p2p.add(peer))
|
||||
console.log('loaded', peers.length, 'peers')
|
||||
}
|
||||
}
|
||||
|
||||
//io.on('connection', function(socket)
|
||||
//{
|
||||
@ -589,6 +602,14 @@ p2p.listen()
|
||||
});
|
||||
});
|
||||
|
||||
recive('peers', (callback) =>
|
||||
{
|
||||
if(typeof callback != 'function')
|
||||
return;
|
||||
|
||||
callback(p2p.size)
|
||||
});
|
||||
|
||||
recive('config', (callback) =>
|
||||
{
|
||||
if(typeof callback != 'function')
|
||||
@ -1186,6 +1207,14 @@ this.stop = (callback) => {
|
||||
if(upnp)
|
||||
upnp.ratsUnmap()
|
||||
|
||||
// safe future peers
|
||||
if(dataDirectory)
|
||||
{
|
||||
const peersEncripted = encryptor.encrypt(p2p.addresses(p2p.peersList()))
|
||||
fs.writeFileSync(dataDirectory + '/peers.p2p', peersEncripted, 'utf8');
|
||||
console.log('peers saved')
|
||||
}
|
||||
|
||||
torrentClient.destroy(() => {
|
||||
sphinx.end(() => spider.close(() => {
|
||||
mysqlSingle.destroy()
|
||||
|
Reference in New Issue
Block a user