diff options
author | Feross Aboukhadijeh <feross@feross.org> | 2016-04-21 09:10:32 +0300 |
---|---|---|
committer | Feross Aboukhadijeh <feross@feross.org> | 2016-04-21 09:10:32 +0300 |
commit | 3daee2c66cbf752b9e6e49b99492b8c1914a4a58 (patch) | |
tree | fbdd6c10f6a64674268dc77d1b3ccb4a37c44a65 /lib/peer.js | |
parent | 7a7c4a8b8c49f5c92b7c20ff439bc8614f7d607e (diff) |
BREAKING: Major cleanup
### Added
- `client.listening` property to signal whether TCP server is listening
for incoming
connections.
### Changed
- Merged `Swarm` class into `Torrent` object. Properties on
`torrent.swarm` (like
`torrent.swarm.wires`) now exist on `torrent` (e.g. `torrent.wires`).
- `torrent.addPeer` can no longer be called before the `infoHash` event
has been
emitted.
- Remove `torrent.on('listening')` event. Use `client.on('listening')`
instead.
- Remove support from `TCPPool` for listening on multiple ports. This
was not used by
WebTorrent and just added complexity. There is now a single `TCPPool`
instance for the
whole WebTorrent client.
- Deprecate: Do not use `client.download()` anymore. Use `client.add()`
instead.
- Deprecate: Do not use `torrent.swarm` anymore. Use `torrent` instead.
### Fixed
- When there is a `torrent.on('error')` listener, don't also emit
`client.on('error')`.
- Do not return existing torrent object when duplicate torrent is
added. Fire an
`'error'` event instead.
- Memory leak of `Torrent` object caused by `RarityMap`
- Memory leak of `Torrent` object caused by `TCPPool`
- `client.ratio` and `torrent.ratio` are now calculated as `uploaded /
received` instead
of `uploaded / downloaded`.
Diffstat (limited to 'lib/peer.js')
-rw-r--r-- | lib/peer.js | 34 |
1 files changed, 11 insertions, 23 deletions
diff --git a/lib/peer.js b/lib/peer.js index 06786c5..fcd296d 100644 --- a/lib/peer.js +++ b/lib/peer.js @@ -60,10 +60,10 @@ exports.createTCPOutgoingPeer = function (addr, swarm) { /** * Peer that represents a Web Seed (BEP17 / BEP19). */ -exports.createWebSeedPeer = function (url, parsedTorrent, swarm) { +exports.createWebSeedPeer = function (url, swarm) { var peer = new Peer(url, 'webSeed') peer.swarm = swarm - peer.conn = new WebConn(url, parsedTorrent) + peer.conn = new WebConn(url, swarm) peer.onConnect() @@ -71,7 +71,7 @@ exports.createWebSeedPeer = function (url, parsedTorrent, swarm) { } /** - * Peer. Represents a peer in the Swarm. + * Peer. Represents a peer in the torrent swarm. * * @param {string} id "ip:port" string, peer id (for WebRTC peers), or url (for Web Seeds) * @param {string} type the type of the peer @@ -161,7 +161,7 @@ Peer.prototype.onHandshake = function (infoHash, peerId) { return self.destroy(new Error('unexpected handshake info hash for this swarm')) } if (peerId === self.swarm.peerId) { - return self.destroy(new Error('refusing to handshake with self')) + return self.destroy(new Error('refusing to connect to ourselves')) } debug('Peer %s got handshake %s', self.id, infoHash) @@ -170,27 +170,12 @@ Peer.prototype.onHandshake = function (infoHash, peerId) { self.retries = 0 - self.wire.on('download', function (downloaded) { - if (self.destroyed) return - self.swarm.downloaded += downloaded - self.swarm.downloadSpeed(downloaded) - self.swarm.emit('download', downloaded) - }) - - self.wire.on('upload', function (uploaded) { - if (self.destroyed) return - self.swarm.uploaded += uploaded - self.swarm.uploadSpeed(uploaded) - self.swarm.emit('upload', uploaded) - }) - - self.swarm.wires.push(self.wire) - var addr = self.addr if (!addr && self.conn.remoteAddress) { addr = self.conn.remoteAddress + ':' + self.conn.remotePort } - self.swarm.emit('wire', self.wire, addr) + self.swarm._onWire(self.wire, addr) + // swarm could be destroyed in user's 'wire' event handler if (!self.swarm || self.swarm.destroyed) return @@ -199,7 +184,10 @@ Peer.prototype.onHandshake = function (infoHash, peerId) { Peer.prototype.handshake = function () { var self = this - self.wire.handshake(self.swarm.infoHash, self.swarm.peerId, self.swarm.handshakeOpts) + var opts = { + dht: self.swarm.private ? false : !!self.swarm.client.dht + } + self.wire.handshake(self.swarm.infoHash, self.swarm.client.peerId, opts) self.sentHandshake = true } @@ -236,8 +224,8 @@ Peer.prototype.destroy = function (err) { var conn = self.conn var wire = self.wire - self.conn = null self.swarm = null + self.conn = null self.wire = null if (swarm && wire) { |