Skip to content

Commit d079171

Browse files
committed
Fixes for PR #129
1 parent 5127aad commit d079171

File tree

3 files changed

+39
-41
lines changed

3 files changed

+39
-41
lines changed

lib/client/websocket-tracker.js

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ function WebSocketTracker (client, announceUrl, opts) {
3131
self.socket = null
3232
self.reconnecting = false
3333
self.retries = 0
34+
self.reconnectTimer = null
3435

3536
self._openSocket()
3637
}
@@ -89,17 +90,6 @@ WebSocketTracker.prototype.destroy = function (cb) {
8990
clearInterval(self.interval)
9091
clearTimeout(self.reconnectTimer)
9192

92-
// Destroy peers
93-
for (var peerId in self.peers) {
94-
var peer = self.peers[peerId]
95-
clearTimeout(peer.trackerTimeout)
96-
peer.destroy()
97-
}
98-
delete self.peers
99-
100-
// Close socked
101-
if (socketPool[self.announceUrl]) socketPool[self.announceUrl].consumers--
102-
10393
self.socket.removeListener('connect', self._onSocketConnectBound)
10494
self.socket.removeListener('data', self._onSocketDataBound)
10595
self.socket.removeListener('close', self._onSocketCloseBound)
@@ -110,6 +100,18 @@ WebSocketTracker.prototype.destroy = function (cb) {
110100
self._onSocketDataBound = null
111101
self._onSocketCloseBound = null
112102

103+
// Destroy peers
104+
for (var peerId in self.peers) {
105+
var peer = self.peers[peerId]
106+
clearTimeout(peer.trackerTimeout)
107+
peer.destroy()
108+
}
109+
self.peers = null
110+
111+
if (socketPool[self.announceUrl]) {
112+
socketPool[self.announceUrl].consumers -= 1
113+
}
114+
113115
if (socketPool[self.announceUrl].consumers === 0) {
114116
delete socketPool[self.announceUrl]
115117

@@ -118,7 +120,7 @@ WebSocketTracker.prototype.destroy = function (cb) {
118120
try {
119121
self.socket.destroy(cb)
120122
} catch (err) {
121-
if (cb) cb()
123+
cb(null)
122124
}
123125
}
124126

@@ -135,12 +137,12 @@ WebSocketTracker.prototype._openSocket = function () {
135137
self._onSocketCloseBound = self._onSocketClose.bind(self)
136138

137139
self.socket = socketPool[self.announceUrl]
138-
if (!self.socket) {
140+
if (self.socket) {
141+
socketPool[self.announceUrl].consumers += 1
142+
} else {
139143
self.socket = socketPool[self.announceUrl] = new Socket(self.announceUrl)
140144
self.socket.consumers = 1
141145
self.socket.on('connect', self._onSocketConnectBound)
142-
} else {
143-
socketPool[self.announceUrl].consumers++
144146
}
145147

146148
self.socket.on('data', self._onSocketDataBound)

server.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,6 @@ Server.prototype._onWebSocketClose = function (socket) {
599599
var swarm = self.torrents[infoHash]
600600
if (swarm) {
601601
swarm.announce({
602-
type: 'ws',
603602
event: 'stopped',
604603
numwant: 0,
605604
peer_id: socket.peerId

test/server.js

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ var peerId = new Buffer('01234567890123456789')
88
var peerId2 = new Buffer('12345678901234567890')
99
var torrentLength = 50000
1010

11-
function serverTest (t, serverType, serverFamily) {
12-
t.plan(25)
11+
function serverTest (t, serverType, serverFamily, cb) {
12+
t.plan(30)
1313

1414
var hostname = serverFamily === 'inet6'
1515
? '[::1]'
@@ -47,17 +47,20 @@ function serverTest (t, serverType, serverFamily) {
4747
t.equal(swarm.incomplete, 1)
4848
t.equal(Object.keys(swarm.peers).length, 1)
4949

50-
if (serverType !== 'ws') {
51-
t.deepEqual(swarm.peers[hostname + ':6881'], {
52-
type: serverType,
53-
ip: clientIp,
54-
port: 6881,
55-
peerId: peerId.toString('hex'),
56-
complete: false,
57-
socket: undefined
58-
})
50+
var id = serverType === 'ws'
51+
? peerId.toString('hex')
52+
: hostname + ':6881'
53+
54+
t.equal(swarm.peers[id].type, serverType)
55+
t.equal(swarm.peers[id].ip, clientIp)
56+
t.equal(swarm.peers[id].peerId, peerId.toString('hex'))
57+
t.equal(swarm.peers[id].complete, false)
58+
if (serverType === 'ws') {
59+
t.equal(typeof swarm.peers[id].port, 'number')
60+
t.ok(swarm.peers[id].socket)
5961
} else {
60-
t.equal(swarm.peers[peerId.toString('hex')].complete, false)
62+
t.equal(swarm.peers[id].port, 6881)
63+
t.notOk(swarm.peers[id].socket)
6164
}
6265

6366
client1.complete()
@@ -104,7 +107,7 @@ function serverTest (t, serverType, serverFamily) {
104107
t.equal(data.incomplete, 0)
105108

106109
client1.destroy()
107-
server.close()
110+
server.close(cb)
108111
})
109112
})
110113
})
@@ -115,19 +118,13 @@ function serverTest (t, serverType, serverFamily) {
115118
})
116119
}
117120

118-
test('create daemon', function (t) {
119-
wrtc = require('electron-webrtc')()
120-
wrtc.electronDaemon.once('ready', t.end)
121-
})
122-
123121
test('websocket server', function (t) {
124-
serverTest(t, 'ws', 'inet')
125-
})
126-
127-
// cleanup
128-
test('cleanup electron-eval daemon', function (t) {
129-
wrtc.close()
130-
t.end()
122+
wrtc = require('electron-webrtc')()
123+
wrtc.electronDaemon.once('ready', function () {
124+
serverTest(t, 'ws', 'inet', function () {
125+
wrtc.close()
126+
})
127+
})
131128
})
132129

133130
test('http ipv4 server', function (t) {

0 commit comments

Comments
 (0)