обновление сидов

This commit is contained in:
Alexey Kasyanchuk 2017-01-15 22:01:44 +03:00
parent df12e2f109
commit 2f17037a27
2 changed files with 69 additions and 44 deletions

View File

@ -302,9 +302,6 @@ io.on('connection', function(socket)
if(hash.length != 40) if(hash.length != 40)
return; return;
if(typeof callback != 'function')
return;
updateTorrentTrackers(hash); updateTorrentTrackers(hash);
}); });
@ -360,52 +357,60 @@ setInterval(() => {
const updateTorrentTrackers = (hash) => { const updateTorrentTrackers = (hash) => {
let maxSeeders = 0, maxLeechers = 0, maxCompleted = 0; let maxSeeders = 0, maxLeechers = 0, maxCompleted = 0;
udpTrackers.forEach((tracker) => { pushDatabaseBalance();
getPeersStatisticUDP(tracker.host, tracker.port, hash, ({seeders, completed, leechers}) => { listenerMysql.query('UPDATE torrents SET trackersChecked = ? WHERE hash = ?', [new Date(), hash], function(err, result) {
if(seeders == 0 && completed == 0 && leechers == 0) popDatabaseBalance();
return; if(!result) {
console.error(err);
}
/* udpTrackers.forEach((tracker) => {
pushDatabaseBalance(); getPeersStatisticUDP(tracker.host, tracker.port, hash, ({seeders, completed, leechers}) => {
listenerMysql.query('INSERT INTO trackers SET ?', statistic, function(err, result) { if(seeders == 0 && completed == 0 && leechers == 0)
popDatabaseBalance(); return;
});
*/
if(seeders < maxSeeders) /*
{ pushDatabaseBalance();
return; listenerMysql.query('INSERT INTO trackers SET ?', statistic, function(err, result) {
} popDatabaseBalance();
if(seeders == maxSeeders && leechers < maxLeechers) });
{ */
return;
}
if(seeders == maxSeeders && leechers == maxLeechers && completed <= maxCompleted)
{
return;
}
maxSeeders = seeders;
maxLeechers = leechers;
maxCompleted = completed;
let checkTime = new Date();
pushDatabaseBalance(); if(seeders < maxSeeders)
listenerMysql.query('UPDATE torrents SET seeders = ?, completed = ?, leechers = ?, trackersChecked = ? WHERE hash = ?', [seeders, completed, leechers, checkTime, hash], function(err, result) { {
popDatabaseBalance(); return;
if(!result) { }
return if(seeders == maxSeeders && leechers < maxLeechers)
} {
return;
}
if(seeders == maxSeeders && leechers == maxLeechers && completed <= maxCompleted)
{
return;
}
maxSeeders = seeders;
maxLeechers = leechers;
maxCompleted = completed;
let checkTime = new Date();
io.sockets.emit('trackerTorrentUpdate', { pushDatabaseBalance();
hash, listenerMysql.query('UPDATE torrents SET seeders = ?, completed = ?, leechers = ?, trackersChecked = ? WHERE hash = ?', [seeders, completed, leechers, checkTime, hash], function(err, result) {
seeders, popDatabaseBalance();
completed, if(!result) {
leechers, return
trackersChecked: checkTime.getTime() }
});
}); io.sockets.emit('trackerTorrentUpdate', {
hash,
seeders,
completed,
leechers,
trackersChecked: checkTime.getTime()
});
});
});
}); });
}); });
} }
client.on('complete', function (metadata, infohash, rinfo) { client.on('complete', function (metadata, infohash, rinfo) {

View File

@ -144,8 +144,28 @@ export default class TorrentPage extends Page {
this.torrent = data this.torrent = data
this.setTitle('Download ' + this.torrent.name); this.setTitle('Download ' + this.torrent.name);
this.forceUpdate(); this.forceUpdate();
// Получаем более новую статистику пира
if((new Date).getTime() - this.torrent.trackersChecked > 10 * 60 * 1000) {
window.torrentSocket.emit('checkTrackers', this.torrent.hash);
}
} }
})); }));
this.trackerUpdate = (info) => {
if(this.props.hash != info.hash)
return;
if(!this.torrent)
return;
Object.assign(this.torrent, info);
this.forceUpdate();
}
window.torrentSocket.on('trackerTorrentUpdate', this.trackerUpdate);
}
componentWillUnmount() {
if(this.trackerUpdate)
window.torrentSocket.off('trackerTorrentUpdate', this.trackerUpdate);
} }
render() { render() {
return ( return (