From 2f17037a2719dac69f36e4512458db2323d2508c Mon Sep 17 00:00:00 2001 From: Alexey Kasyanchuk Date: Sun, 15 Jan 2017 22:01:44 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=81=D0=B8=D0=B4=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 93 ++++++++++++++++++++++++--------------------- src/torrent-page.js | 20 ++++++++++ 2 files changed, 69 insertions(+), 44 deletions(-) diff --git a/index.js b/index.js index c1e427b..08375f6 100644 --- a/index.js +++ b/index.js @@ -302,9 +302,6 @@ io.on('connection', function(socket) if(hash.length != 40) return; - if(typeof callback != 'function') - return; - updateTorrentTrackers(hash); }); @@ -360,52 +357,60 @@ setInterval(() => { const updateTorrentTrackers = (hash) => { let maxSeeders = 0, maxLeechers = 0, maxCompleted = 0; - udpTrackers.forEach((tracker) => { - getPeersStatisticUDP(tracker.host, tracker.port, hash, ({seeders, completed, leechers}) => { - if(seeders == 0 && completed == 0 && leechers == 0) - return; + pushDatabaseBalance(); + listenerMysql.query('UPDATE torrents SET trackersChecked = ? WHERE hash = ?', [new Date(), hash], function(err, result) { + popDatabaseBalance(); + if(!result) { + console.error(err); + } - /* - pushDatabaseBalance(); - listenerMysql.query('INSERT INTO trackers SET ?', statistic, function(err, result) { - popDatabaseBalance(); - }); - */ + udpTrackers.forEach((tracker) => { + getPeersStatisticUDP(tracker.host, tracker.port, hash, ({seeders, completed, leechers}) => { + if(seeders == 0 && completed == 0 && leechers == 0) + return; - if(seeders < maxSeeders) - { - 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(); + /* + pushDatabaseBalance(); + listenerMysql.query('INSERT INTO trackers SET ?', statistic, function(err, result) { + popDatabaseBalance(); + }); + */ - pushDatabaseBalance(); - listenerMysql.query('UPDATE torrents SET seeders = ?, completed = ?, leechers = ?, trackersChecked = ? WHERE hash = ?', [seeders, completed, leechers, checkTime, hash], function(err, result) { - popDatabaseBalance(); - if(!result) { - return - } + if(seeders < maxSeeders) + { + 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', { - hash, - seeders, - completed, - leechers, - trackersChecked: checkTime.getTime() - }); - }); + pushDatabaseBalance(); + listenerMysql.query('UPDATE torrents SET seeders = ?, completed = ?, leechers = ?, trackersChecked = ? WHERE hash = ?', [seeders, completed, leechers, checkTime, hash], function(err, result) { + popDatabaseBalance(); + if(!result) { + return + } + + io.sockets.emit('trackerTorrentUpdate', { + hash, + seeders, + completed, + leechers, + trackersChecked: checkTime.getTime() + }); + }); + }); }); - }); + }); } client.on('complete', function (metadata, infohash, rinfo) { diff --git a/src/torrent-page.js b/src/torrent-page.js index 803b291..15f9047 100644 --- a/src/torrent-page.js +++ b/src/torrent-page.js @@ -144,8 +144,28 @@ export default class TorrentPage extends Page { this.torrent = data this.setTitle('Download ' + this.torrent.name); 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() { return (