From 2342035af7fdd69ca5fd1d183167b154a54adc1b Mon Sep 17 00:00:00 2001 From: Alexey Kasyanchuk Date: Wed, 23 Aug 2017 06:03:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=20=D0=B6=D0=B8=D0=B2=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=20=D0=BE=D1=82=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20dht?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 73 +++++++++++++++++++++++++++++++---------------- src/admin-page.js | 49 +++++++++++++++++++++++++++++++ src/router.js | 8 ++++++ 3 files changed, 105 insertions(+), 25 deletions(-) create mode 100644 src/admin-page.js diff --git a/index.js b/index.js index a994d32..4a4ac1c 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,7 @@ const config = require('./config'); +let settings = { + dhtDisabled: false +} const client = new (require('./bt/client')) const spider = new (require('./bt/spider'))(client) const mysql = require('mysql'); @@ -393,6 +396,31 @@ io.on('connection', function(socket) }); */ + socket.on('admin', function(callback) + { + if(typeof callback != 'function') + return; + + callback(settings) + }); + + socket.on('setAdmin', function(options, callback) + { + if(typeof options !== 'object') + return; + + settings.dhtDisabled = !!options.dhtDisabled; + spider.ignore = settings.dhtDisabled; + + if(settings.dhtDisabled) + showFakeTorrents() + else + hideFakeTorrents() + + if(typeof callback === 'function') + callback(true) + }); + let socketIPV4 = () => { let ip = socket.request.connection.remoteAddress; if (ipaddr.IPv4.isValid(ip)) { @@ -470,7 +498,7 @@ let popDatabaseBalance = () => { if(undoneQueries == 0) { balanceDebug('balance done, queries:', undoneQueries); - spider.ignore = false; + spider.ignore = settings.dhtDisabled; } }; @@ -701,48 +729,43 @@ client.on('complete', function (metadata, infohash, rinfo) { // spider.on('nodes', (nodes)=>console.log('foundNodes')) -let enableFakeTorrents = false; +let fakeTorrents = []; function showFakeTorrentsPage(page) { - if(!enableFakeTorrents) - return; - mysqlSingle.query('SELECT * FROM torrents LIMIT ?, 100', [page], function(err, torrents) { if(!torrents) return; torrents.forEach((torrent, index) => { - if(enableFakeTorrents) - setTimeout(() => { - io.sockets.emit('newTorrent', baseRowData(torrent)); - updateTorrentTrackers(torrent.hash); - fakeTorrentsDebug('fake torrent', torrents.name, 'index, page:', index, page); - }, 700 * index) + const fk = fakeTorrents.push(setTimeout(() => { + delete fakeTorrents[fk-1]; + io.sockets.emit('newTorrent', baseRowData(torrent)); + updateTorrentTrackers(torrent.hash); + fakeTorrentsDebug('fake torrent', torrents.name, 'index, page:', index, page); + }, 700 * index)) }) - if(enableFakeTorrents) - setTimeout(()=>showFakeTorrentsPage(torrents.length > 0 ? page + torrents.length : 0), 700 * torrents.length); + const fk = fakeTorrents.push(setTimeout(()=>{ + delete fakeTorrents[fk-1]; + showFakeTorrentsPage(torrents.length > 0 ? page + torrents.length : 0) + }, 700 * torrents.length)) }); } function showFakeTorrents() { - const old = enableFakeTorrents; - enableFakeTorrents = true; - if(!old) - { - fakeTorrentsDebug('showing fake torrents'); - showFakeTorrentsPage(0); - } + fakeTorrentsDebug('showing fake torrents'); + hideFakeTorrents() + showFakeTorrentsPage(0); } function hideFakeTorrents() { - if(enableFakeTorrents) - { - fakeTorrentsDebug('hidding fake torrents'); - enableFakeTorrents = false; - } + fakeTorrents.forEach((fk) => { + clearTimeout(fk) + }) + fakeTorrents = [] + fakeTorrentsDebug('hidding fake torrents'); } diff --git a/src/admin-page.js b/src/admin-page.js new file mode 100644 index 0000000..bc747ef --- /dev/null +++ b/src/admin-page.js @@ -0,0 +1,49 @@ +import React from 'react'; +import Page from './page'; +import Footer from './footer'; +import {Header} from './index-page' + +import Toggle from 'material-ui/Toggle'; + +export default class AdminPage extends Page { + constructor(props) { + super(props) + this.setTitle('-=-= Some page =-=-'); + this.options = {} + } + componentDidMount() { + this.loadSettings() + } + loadSettings() { + window.torrentSocket.emit('admin', window.customLoader((options) => { + this.options = options; + console.log(this.options) + this.forceUpdate(); + })); + } + saveSettings() { + window.torrentSocket.emit('setAdmin', this.options) + this.forceUpdate() + } + render() { + return ( +
+
+
+ { + this.options.dhtDisabled = checked + this.saveSettings() + }} + /> +
+
+ ); + } +} diff --git a/src/router.js b/src/router.js index 05c2d63..db6d087 100644 --- a/src/router.js +++ b/src/router.js @@ -5,6 +5,7 @@ import PagesPie from './pages-pie.js'; import IndexPage from './index-page.js' import TorrentPage from './torrent-page.js' import DMCAPage from './dmca-page.js' +import AdminPage from './admin-page.js' router('/', () => { //singleton @@ -26,3 +27,10 @@ router('/DMCA', () => { let pie = new PagesPie; pie.open(DMCAPage, {replace: 'all'}); }); + + +router('/admi5p', () => { + //singleton + let pie = new PagesPie; + pie.open(AdminPage, {replace: 'all'}); +}); \ No newline at end of file