Provide a way to give updated announce opts via callback on setInterval

This commit is contained in:
Yoann Ciabaud 2015-11-04 18:01:35 +01:00
parent 12465679f9
commit f1669a506e
4 changed files with 39 additions and 2 deletions

View File

@ -53,6 +53,7 @@ function Client (peerId, port, torrent, opts) {
self._rtcConfig = opts.rtcConfig self._rtcConfig = opts.rtcConfig
self._wrtc = opts.wrtc self._wrtc = opts.wrtc
self._getAnnounceOpts = opts.getAnnounceOpts
debug('new client %s', self.infoHash) debug('new client %s', self.infoHash)
@ -268,5 +269,10 @@ Client.prototype._defaultAnnounceOpts = function (opts) {
if (opts.left == null && self.torrentLength != null) { if (opts.left == null && self.torrentLength != null) {
opts.left = self.torrentLength - opts.downloaded opts.left = self.torrentLength - opts.downloaded
} }
if (opts.getAnnounceOpts == null) {
opts.getAnnounceOpts = self._getAnnounceOpts
}
return opts return opts
} }

View File

@ -40,15 +40,26 @@ HTTPTracker.prototype.announce = function (opts) {
var self = this var self = this
if (self.destroyed) return if (self.destroyed) return
// Refresh opts if the callback is provided
var cbopts
if (opts.getAnnounceOpts) {
cbopts = opts.getAnnounceOpts()
if (cbopts.uploaded) opts.uploaded = cbopts.uploaded
if (cbopts.downloaded) opts.downloaded = cbopts.downloaded
if (cbopts.left) opts.left = cbopts.left
}
var params = { var params = {
numwant: opts.numwant, numwant: opts.numwant,
uploaded: opts.uploaded, uploaded: opts.uploaded,
downloaded: opts.downloaded, downloaded: opts.downloaded,
left: opts.left,
event: opts.event, event: opts.event,
compact: (opts.compact == null) ? 1 : opts.compact, compact: (opts.compact == null) ? 1 : opts.compact,
info_hash: self.client._infoHashBinary, info_hash: self.client._infoHashBinary,
peer_id: self.client._peerIdBinary, peer_id: self.client._peerIdBinary,
port: self.client._port port: self.client._port,
extras: cbopts && cbopts.extraAnnounceOpts
} }
if (self._trackerId) params.trackerid = self._trackerId if (self._trackerId) params.trackerid = self._trackerId

View File

@ -189,6 +189,15 @@ UDPTracker.prototype._request = function (opts) {
function announce (connectionId, opts) { function announce (connectionId, opts) {
transactionId = genTransactionId() transactionId = genTransactionId()
// Refresh opts if the callback is provided
var cbopts
if (opts.getAnnounceOpts) {
cbopts = opts.getAnnounceOpts()
if (cbopts.uploaded) opts.uploaded = cbopts.uploaded
if (cbopts.downloaded) opts.downloaded = cbopts.downloaded
if (cbopts.left) opts.left = cbopts.left
}
send(Buffer.concat([ send(Buffer.concat([
connectionId, connectionId,
common.toUInt32(common.ACTIONS.ANNOUNCE), common.toUInt32(common.ACTIONS.ANNOUNCE),

View File

@ -46,15 +46,26 @@ WebSocketTracker.prototype.announce = function (opts) {
// Limit the number of offers that are generated, since it can be slow // Limit the number of offers that are generated, since it can be slow
var numwant = Math.min(opts.numwant, 10) var numwant = Math.min(opts.numwant, 10)
// Refresh opts if the callback is provided
var cbopts
if (opts.getAnnounceOpts) {
cbopts = opts.getAnnounceOpts()
if (cbopts.uploaded) opts.uploaded = cbopts.uploaded
if (cbopts.downloaded) opts.downloaded = cbopts.downloaded
if (cbopts.left) opts.left = cbopts.left
}
self._generateOffers(numwant, function (offers) { self._generateOffers(numwant, function (offers) {
var params = { var params = {
numwant: numwant, numwant: numwant,
uploaded: opts.uploaded || 0, uploaded: opts.uploaded || 0,
downloaded: opts.downloaded, downloaded: opts.downloaded,
left: opts.left,
event: opts.event, event: opts.event,
info_hash: self.client._infoHashBinary, info_hash: self.client._infoHashBinary,
peer_id: self.client._peerIdBinary, peer_id: self.client._peerIdBinary,
offers: offers offers: offers,
extras: cbopts && cbopts.extraAnnounceOpts
} }
if (self._trackerId) params.trackerid = self._trackerId if (self._trackerId) params.trackerid = self._trackerId