resolve file transfer function
This commit is contained in:
parent
70e865451d
commit
39e2dd71dc
@ -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()
|
||||||
|
Loading…
Reference in New Issue
Block a user