diff --git a/index.js b/index.js index 7d32d66..2f97c10 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,7 @@ const client = new (require('./lib/client')) const spider = new (require('./lib/spider'))(client) const mysql = require('mysql'); +const getPeersStatisticUDP = require('./lib/udp-tracker-request') var express = require('express'); var app = express(); @@ -27,6 +28,25 @@ let socketMysql = mysql.createPool({ database : mysqlSettings.database }); +const udpTrackers = [ + { + host: 'tracker.coppersurfer.tk', + port: 6969 + }, + { + host: 'tracker.leechers-paradise.org', + port: 6969 + }, + { + host: 'tracker.opentrackr.org', + port: 1337 + }, + { + host: '9.rarbg.me', + port: 2710 + } +] + let listenerMysql; function handleListenerDisconnect() { listenerMysql = mysql.createConnection(mysqlSettings); @@ -79,6 +99,9 @@ io.on('connection', function(socket) added: row.added.getTime(), contentType: row.contentType, contentCategory: row.contentCategory, + seeders: row.seeders, + completed: row.completed, + leechers: row.leechers, } } @@ -330,6 +353,51 @@ 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 + }); + }); + }); + }); } else { diff --git a/lib/udp-tracker-request.js b/lib/udp-tracker-request.js index 84ab7bf..a54c770 100644 --- a/lib/udp-tracker-request.js +++ b/lib/udp-tracker-request.js @@ -31,6 +31,13 @@ let connectTracker = function(connection) { buffer.writeUInt32BE(ACTION_CONNECT, 8); buffer.writeUInt32BE(transactionId, 12); + // очистка старых соединений + for(transaction in requests) { + if((new Date).getTime() - requests[transaction].date.getTime() > 60 * 1000) { + delete requests[transaction]; + } + } + requests[transactionId] = connection; message(buffer, connection.host, connection.port); }; @@ -58,12 +65,9 @@ let scrapeTorrent = function (connectionIdHigh, connectionIdLow, transactionId) server.on("message", function (msg, rinfo) { let buffer = new Buffer(msg) - console.log('response from ' + rinfo); - const action = buffer.readUInt32BE(0, 4); const transactionId = buffer.readUInt32BE(4, 4); - console.log(Object.keys(requests)); if(!(transactionId in requests)) return; @@ -103,7 +107,7 @@ server.on("message", function (msg, rinfo) { let getPeersStatistic = (host, port, hash, callback) => { let connection = { - host, port, hash, callback + host, port, hash, callback, date: new Date() } connectTracker(connection); } @@ -113,15 +117,11 @@ server.on("listening", function () { console.log("listening udp tracker respose on " + address.address + ":" + address.port); }); -server.bind(4444); +server.bind(4446); -getPeersStatistic('tracker.coppersurfer.tk', 6969, "d096ff66557a5ea7030680967610e38b37434ea9", (data) => { - console.log(data) -}); +module.exports = getPeersStatistic; + +//getPeersStatistic('tracker.glotorrents.com', 6969, "d096ff66557a5ea7030680967610e38b37434ea8", (data) => { +// console.log(data) +//}); -getPeersStatistic('tracker.coppersurfer.tk', 6969, "d096ff66557a5ea7030680967610e38b37434ea8", (data) => { - console.log(data) -}); -getPeersStatistic('tracker.coppersurfer.tk', 6969, "d096ff66557a5ea7030680967610e38b37434ea8", (data) => { - console.log(data) -}); diff --git a/src/recent-torrents.js b/src/recent-torrents.js index c54a8ac..f16c7ef 100644 --- a/src/recent-torrents.js +++ b/src/recent-torrents.js @@ -30,6 +30,17 @@ return ( : null } + { + torrent.seeders || torrent.leechers || torrent.completed + ? +