@@ -18,6 +18,7 @@ var socketPool = {}
1818
1919var RECONNECT_VARIANCE = 30 * 1000
2020var RECONNECT_MINIMUM = 5 * 1000
21+ var OFFER_TIMEOUT = 50 * 1000
2122
2223inherits ( WebSocketTracker , Tracker )
2324
@@ -42,8 +43,7 @@ WebSocketTracker.prototype.announce = function (opts) {
4243 return self . socket . once ( 'connect' , self . announce . bind ( self , opts ) )
4344 }
4445
45- // TODO: Limit number of offers (temporarily)
46- // TODO: remove this when we cleanup old RTCPeerConnections cleanly
46+ // Limit the number of offers that are generated, since it can be slow
4747 var numwant = Math . min ( opts . numwant , 10 )
4848
4949 self . _generateOffers ( numwant , function ( offers ) {
@@ -177,6 +177,7 @@ WebSocketTracker.prototype._onSocketData = function (data) {
177177
178178 var peer
179179 if ( data . offer && data . peer_id ) {
180+ debug ( 'creating peer (from remote offer)' )
180181 peer = new Peer ( {
181182 trickle : false ,
182183 config : self . client . _rtcConfig ,
@@ -199,11 +200,16 @@ WebSocketTracker.prototype._onSocketData = function (data) {
199200 }
200201
201202 if ( data . answer && data . peer_id ) {
202- peer = self . peers [ common . binaryToHex ( data . offer_id ) ]
203+ var offerId = common . binaryToHex ( data . offer_id )
204+ peer = self . peers [ offerId ]
203205 if ( peer ) {
204206 peer . id = common . binaryToHex ( data . peer_id )
205207 peer . signal ( data . answer )
206208 self . client . emit ( 'peer' , peer )
209+
210+ clearTimeout ( peer . trackerTimeout )
211+ peer . trackerTimeout = null
212+ self . peers [ offerId ] = null
207213 } else {
208214 debug ( 'got unexpected answer: ' + JSON . stringify ( data . answer ) )
209215 }
@@ -253,13 +259,13 @@ WebSocketTracker.prototype._generateOffers = function (numwant, cb) {
253259 var offers = [ ]
254260 debug ( 'generating %s offers' , numwant )
255261
256- // TODO: cleanup dead peers and peers that never get a return offer, from self.peers
257262 for ( var i = 0 ; i < numwant ; ++ i ) {
258263 generateOffer ( )
259264 }
260265
261266 function generateOffer ( ) {
262267 var offerId = hat ( 160 )
268+ debug ( 'creating peer (from _generateOffers)' )
263269 var peer = self . peers [ offerId ] = new Peer ( {
264270 initiator : true ,
265271 trickle : false ,
@@ -273,6 +279,12 @@ WebSocketTracker.prototype._generateOffers = function (numwant, cb) {
273279 } )
274280 checkDone ( )
275281 } )
282+ peer . trackerTimeout = setTimeout ( function ( ) {
283+ debug ( 'tracker timeout: destroying peer' )
284+ peer . trackerTimeout = null
285+ self . peers [ offerId ] = null
286+ peer . destroy ( )
287+ } , OFFER_TIMEOUT )
276288 }
277289
278290 function checkDone ( ) {
0 commit comments