rats-search/index.js
2017-01-01 05:56:09 +03:00

130 lines
2.9 KiB
JavaScript

const client = new (require('./lib/client'))
const spider = new (require('./lib/spider'))(client)
const mysql = require('mysql');
var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
// Start server
server.listen(8099);
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '',
database : 'btsearch'
});
app.get('/', function(req, res)
{
res.sendfile(__dirname + '/build/index.html');
});
app.use(express.static('build'));
io.on('connection', function(socket)
{
socket.on('recentTorrents', function(callback)
{
connection.query('SELECT * FROM `torrents` ORDER BY added DESC LIMIT 0,10', function (error, rows, fields) {
let torrents = [];
rows.forEach((row) => {
torrents.push({
hash: row.hash,
name: row.name,
size: row.size,
files: row.files,
piecelength: row.piecelength,
});
});
callback(torrents)
});
});
socket.on('torrent', function(hash, callback)
{
connection.query('SELECT * FROM `torrents` WHERE `hash` = ?', hash, function (error, rows, fields) {
if(rows.length == 0) {
callback(undefined);
return;
}
callback({
hash: rows[0].hash,
name: rows[0].name,
size: rows[0].size,
files: rows[0].files,
piecelength: rows[0].piecelength,
})
});
});
});
connection.connect(function(err) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
//spider.on('ensureHash', (hash, addr)=> {
// console.log('new hash');
//})
client.on('complete', function (metadata, infohash, rinfo) {
console.log('writing torrent to db');
const hash = infohash.toString('hex');
let size = metadata.info.length ? metadata.info.length : 0;
let filesCount = 1;
if(metadata.info.files && metadata.info.files.length > 0)
{
filesCount = metadata.info.files.length;
size = 0;
connection.query('DELETE FROM files WHERE hash = :hash', {hash: hash}, function (err, result) {
})
for(let i = 0; i < metadata.info.files.length; i++)
{
let file = metadata.info.files[i];
let fileQ = {
hash: hash,
path: file.path,
size: file.length,
};
let query = connection.query('INSERT INTO files SET ?', fileQ, function(err, result) {
// Neat!
});
size += file.length;
}
}
var torrentQ = {
hash: hash,
name: metadata.info.name,
size: size,
files: filesCount,
piecelength: metadata.info['piece length'],
ipv4: rinfo.address,
port: rinfo.port
};
var query = connection.query('INSERT INTO torrents SET ?', torrentQ, function(err, result) {
if(result) {
io.sockets.emit('newTorrent', {
hash: hash,
name: metadata.info.name,
size: size,
files: filesCount,
piecelength: metadata.info['piece length']
});
}
});
});
// spider.on('nodes', (nodes)=>console.log('foundNodes'))
spider.listen(4445)
});