diff --git a/code/map_data_request.js b/code/map_data_request.js index a1e9af30..6967bbe4 100644 --- a/code/map_data_request.js +++ b/code/map_data_request.js @@ -487,6 +487,7 @@ window.MapDataRequest.prototype.handleResponse = function (data, tiles, success) var errorTiles = []; var retryTiles = []; var timeoutTiles = []; + var unaccountedTiles = tiles.slice(0); // Clone if (!success || !data || !data.result) { console.warn('Request.handleResponse: request failed - requeuing...'+(data && data.error?' error: '+data.error:'')); @@ -513,7 +514,7 @@ window.MapDataRequest.prototype.handleResponse = function (data, tiles, success) window.runHooks('requestFinished', {success: false}); } - + unaccountedTiles = []; } else { // TODO: use result.minLevelOfDetail ??? stock site doesn't use it yet... @@ -522,7 +523,7 @@ window.MapDataRequest.prototype.handleResponse = function (data, tiles, success) for (var id in m) { var val = m[id]; - + unaccountedTiles.splice(unaccountedTiles.indexOf(id), 1); if ('error' in val) { // server returned an error for this individual data tile @@ -571,6 +572,7 @@ window.MapDataRequest.prototype.handleResponse = function (data, tiles, success) if (retryTiles.length) statusMsg += ', '+retryTiles.length+' retried'; if (timeoutTiles.length) statusMsg += ', '+timeoutTiles.length+' timed out'; if (errorTiles.length) statusMsg += ', '+errorTiles.length+' failed'; + if (unaccountedTiles.length) statusMsg += ', '+unaccountedTiles.length+' unaccounted'; statusMsg += '. delay '+nextQueueDelay+' seconds'; console.log (statusMsg); @@ -602,6 +604,14 @@ window.MapDataRequest.prototype.handleResponse = function (data, tiles, success) } } + if (unaccountedTiles.length > 0) { + for (var i in unaccountedTiles) { + var id = unaccountedTiles[i]; + delete this.requestedTiles[id]; + this.requeueTile(id, true); + } + } + for (var i in successTiles) { var id = successTiles[i]; delete this.requestedTiles[id];