@@ -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
9698Swarm . prototype . _getPeers = function ( numwant ) {
0 commit comments