diff --git a/index.js b/index.js index aae6e34..a96fc32 100644 --- a/index.js +++ b/index.js @@ -151,6 +151,7 @@ io.on('connection', function(socket) seeders: row.seeders, completed: row.completed, leechers: row.leechers, + trackersChecked: row.trackersChecked ? row.trackersChecked.getTime() : undefined, } } @@ -272,6 +273,18 @@ io.on('connection', function(socket) })); }); }); + + socket.on('checkTrackers', function(hash) + { + if(hash.length != 40) + return; + + if(typeof callback != 'function') + return; + + updateTorrentTrackers(hash); + }); + }); let undoneQueries = 0; @@ -322,6 +335,56 @@ setInterval(() => { }); }, 10 * 60 * 1000) +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('INSERT INTO trackers SET ?', statistic, function(err, result) { + popDatabaseBalance(); + }); + */ + + 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('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) { console.log('writing torrent to db'); const hash = infohash.toString('hex'); @@ -402,51 +465,7 @@ client.on('complete', function (metadata, infohash, rinfo) { contentType: torrentQ.contentType, contentCategory: torrentQ.contentCategory, }); - 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('INSERT INTO trackers SET ?', statistic, function(err, result) { - popDatabaseBalance(); - }); - */ - - if(seeders < maxSeeders) - { - return; - } - if(seeders == maxSeeders && leechers < maxLeechers) - { - return; - } - if(seeders == maxSeeders && leechers == maxLeechers && completed <= maxCompleted) - { - return; - } - maxSeeders = seeders; - maxLeechers = leechers; - maxCompleted = completed; - - pushDatabaseBalance(); - listenerMysql.query('UPDATE torrents SET seeders = ?, completed = ?, leechers = ? WHERE hash = ?', [seeders, completed, leechers, hash], function(err, result) { - popDatabaseBalance(); - if(!result) { - return - } - - io.sockets.emit('trackerTorrentUpdate', { - hash, - seeders, - completed, - leechers - }); - }); - }); - }); + updateTorrentTrackers(hash); } else {