Skip to content

Commit e234f14

Browse files
committed
server swarm: split out announce events
1 parent 8439300 commit e234f14

File tree

1 file changed

+67
-65
lines changed

1 file changed

+67
-65
lines changed

lib/swarm.js

Lines changed: 67 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -15,82 +15,84 @@ Swarm.prototype.announce = function (params, cb) {
1515
var self = this
1616
var peer = self.peers[params.addr]
1717

18-
var start = function () {
19-
if (peer) {
20-
debug('unexpected `started` event from peer that is already in swarm')
21-
return update() // treat as an update
22-
}
23-
if (params.left === 0) self.complete += 1
24-
else self.incomplete += 1
25-
peer = self.peers[params.addr] = {
26-
ip: params.ip,
27-
port: params.port,
28-
peerId: params.peer_id
29-
}
30-
self.emit('start', params.addr)
31-
}
18+
// Dispatch announce event
19+
if (!params.event || params.event === 'empty') params.event = 'update'
20+
var fn = '_onAnnounce_' + params.event
21+
if (self[fn]) {
22+
self[fn](params, peer, function (err) {
23+
// event processed, prepare response:
24+
25+
if (params.left === 0 && peer) peer.complete = true
3226

33-
var stop = function () {
34-
if (!peer) {
35-
debug('unexpected `stopped` event from peer that is not in swarm')
36-
return // do nothing
37-
}
38-
if (peer.complete) self.complete -= 1
39-
else self.incomplete -= 1
40-
self.peers[params.addr] = null
41-
self.emit('stop', params.addr)
27+
// send peers
28+
var peers = self._getPeers(params.numwant)
29+
30+
cb(null, {
31+
complete: self.complete,
32+
incomplete: self.incomplete,
33+
peers: peers
34+
})
35+
})
36+
} else {
37+
cb(new Error('invalid event'))
4238
}
39+
}
4340

44-
var complete = function () {
45-
if (!peer) {
46-
debug('unexpected `completed` event from peer that is not in swarm')
47-
return start() // treat as a start
48-
}
49-
if (peer.complete) {
50-
debug('unexpected `completed` event from peer that is already marked as completed')
51-
return // do nothing
52-
}
53-
self.complete += 1
54-
self.incomplete -= 1
55-
peer.complete = true
56-
self.emit('complete', params.addr)
41+
Swarm.prototype._onAnnounce_started = function (params, peer, cb) {
42+
if (peer) {
43+
debug('unexpected `started` event from peer that is already in swarm')
44+
return this._onAnnounce_update() // treat as an update
45+
}
46+
if (params.left === 0) this.complete += 1
47+
else this.incomplete += 1
48+
peer = this.peers[params.addr] = {
49+
ip: params.ip,
50+
port: params.port,
51+
peerId: params.peer_id
5752
}
53+
this.emit('start', params.addr)
54+
55+
cb()
56+
}
5857

59-
var update = function () {
60-
if (!peer) {
61-
debug('unexpected `update` event from peer that is not in swarm')
62-
return start() // treat as a start
63-
}
64-
self.emit('update', params.addr)
58+
Swarm.prototype._onAnnounce_stopped = function (params, peer, cb) {
59+
if (!peer) {
60+
debug('unexpected `stopped` event from peer that is not in swarm')
61+
return // do nothing
6562
}
63+
if (peer.complete) this.complete -= 1
64+
else this.incomplete -= 1
65+
this.peers[params.addr] = null
66+
this.emit('stop', params.addr)
6667

67-
switch (params.event) {
68-
case 'started':
69-
start()
70-
break
71-
case 'stopped':
72-
stop()
73-
break
74-
case 'completed':
75-
complete()
76-
break
77-
case '': case undefined: case 'empty': case 'update': // update
78-
update()
79-
break
80-
default:
81-
return cb(new Error('invalid event')) // early return
68+
cb()
69+
}
70+
71+
Swarm.prototype._onAnnounce_completed = function (params, peer, cb) {
72+
if (!peer) {
73+
debug('unexpected `completed` event from peer that is not in swarm')
74+
return start() // treat as a start
8275
}
76+
if (peer.complete) {
77+
debug('unexpected `completed` event from peer that is already marked as completed')
78+
return // do nothing
79+
}
80+
this.complete += 1
81+
this.incomplete -= 1
82+
peer.complete = true
83+
this.emit('complete', params.addr)
8384

84-
if (params.left === 0 && peer) peer.complete = true
85+
cb()
86+
}
8587

86-
// send peers
87-
var peers = self._getPeers(params.numwant)
88+
Swarm.prototype._onAnnounce_update = function (params, peer, cb) {
89+
if (!peer) {
90+
debug('unexpected `update` event from peer that is not in swarm')
91+
return start() // treat as a start
92+
}
93+
this.emit('update', params.addr)
8894

89-
cb(null, {
90-
complete: this.complete,
91-
incomplete: this.incomplete,
92-
peers: peers
93-
})
95+
cb()
9496
}
9597

9698
Swarm.prototype._getPeers = function (numwant) {

0 commit comments

Comments
 (0)