resolve file transfer function

This commit is contained in:
Alexey Kasyanchuk 2018-09-01 05:31:10 +03:00
parent 70e865451d
commit 39e2dd71dc

View File

@ -411,44 +411,52 @@ class p2p {
} }
logT('transfer', 'get file request', path) logT('transfer', 'get file request', path)
const fileStream = fs.createWriteStream(this.dataDirectory + '/' + (targetPath || ph.basename(path))) return new Promise((resolve) =>
let peer = null {
let firstTransfer = false const fileStream = fs.createWriteStream(this.dataDirectory + '/' + (targetPath || ph.basename(path)))
let deleteCallback = (remotePeer || this).emit('file', {path}, (chunk, nil, addr) => { let peer = null
if(peer && addr !== peer) let firstTransfer = false
{ let deleteCallback = (remotePeer || this).emit('file', {path}, (chunk, nil, addr) => {
logT('transfer', 'ignore other peers responce', addr.peerId) if(peer && addr !== peer)
return {
} logT('transfer', 'ignore other peers responce', addr.peerId)
return
}
if(!chunk) if(!chunk)
{ {
logT('transfer', 'closing transfering file stream', path) logT('transfer', 'closing transfering file stream', path)
deleteCallback() deleteCallback()
fileStream.end() fileStream.end()
return if(firstTransfer) // данные передало до этого, значит файл целый
} {
resolve(true)
}
return
}
const {data} = chunk const {data} = chunk
if(!data || data.type !== 'Buffer') if(!data || data.type !== 'Buffer')
{ {
logTE('transfer', 'error on file transfer', path) logTE('transfer', 'error on file transfer', path)
deleteCallback() deleteCallback()
fileStream.end() fileStream.end()
return resolve(false)
} return
}
// make sure no othe peer will recive data // make sure no othe peer will recive data
peer = addr peer = addr
if(!firstTransfer) if(!firstTransfer)
{ {
firstTransfer = true firstTransfer = true
logT('transfer', 'got peer for tranfer, start transfering file', path, 'from peer', addr.peerId) logT('transfer', 'got peer for tranfer, start transfering file', path, 'from peer', addr.peerId)
} }
const buffer = Buffer.from(data.data) const buffer = Buffer.from(data.data)
fileStream.write(buffer) fileStream.write(buffer)
}, true) // dont clear callback }, true) // dont clear callback
})
} }
peersList() peersList()