fix(closing): more proper closing without errors

This commit is contained in:
Alexey Kasyanchuk 2018-06-22 23:51:57 +03:00
parent 35157457c7
commit 16164c25d8
2 changed files with 14 additions and 4 deletions

View File

@ -181,6 +181,7 @@ class p2p {
for (const client in this.clients) { for (const client in this.clients) {
this.clients[client]._socket.destroy(); this.clients[client]._socket.destroy();
} }
this.peers = []
return promise return promise
} }

View File

@ -312,7 +312,7 @@ setInterval(() => {
const updateTorrentTrackers = (hash) => { const updateTorrentTrackers = (hash) => {
let maxSeeders = 0, maxLeechers = 0, maxCompleted = 0; let maxSeeders = 0, maxLeechers = 0, maxCompleted = 0;
mysqlSingle.query('UPDATE torrents SET trackersChecked = ? WHERE hash = ?', [Math.floor(Date.now() / 1000), hash], function(err, result) { mysqlSingle.query('UPDATE torrents SET trackersChecked = ? WHERE hash = ?', [Math.floor(Date.now() / 1000), hash], (err, result) => {
if(!result) { if(!result) {
console.error(err); console.error(err);
return return
@ -320,6 +320,9 @@ setInterval(() => {
udpTrackers.forEach((tracker) => { udpTrackers.forEach((tracker) => {
getPeersStatisticUDP(tracker.host, tracker.port, hash, ({seeders, completed, leechers}) => { getPeersStatisticUDP(tracker.host, tracker.port, hash, ({seeders, completed, leechers}) => {
if(this.closing) // ignore trackers response if app is closing
return
if(seeders == 0 && completed == 0 && leechers == 0) if(seeders == 0 && completed == 0 && leechers == 0)
return; return;
@ -769,13 +772,11 @@ setInterval(() => {
} }
this.stop = async (callback) => { this.stop = async (callback) => {
this.closing = true
console.log('spider closing...') console.log('spider closing...')
if(upnp) if(upnp)
upnp.ratsUnmap() upnp.ratsUnmap()
console.log('closing p2p...')
await p2p.close()
// save feed // save feed
await feed.save() await feed.save()
@ -840,6 +841,14 @@ setInterval(() => {
} }
} }
console.log('closing p2p...')
// don't listen spider peer appears
spider.removeAllListeners('peer')
await p2p.close()
// don't listen complete torrent responses
client.removeAllListeners('complete')
torrentClient.destroy(() => { torrentClient.destroy(() => {
sphinx.end(() => spider.close(() => { sphinx.end(() => spider.close(() => {
mysqlSingle.destroy() mysqlSingle.destroy()