@@ -7,8 +7,8 @@ var DailyLeaderboard = (function() {
77 'use strict' ;
88
99 var WINDOW_BLOCKS = 28800 ;
10- var BATCH_SIZE = 20 ;
11- var YIELD_MS = 20 ;
10+ var BATCH_SIZE = 50 ;
11+ var YIELD_MS = 5 ;
1212 var _initialized = false ;
1313 var _loading = false ;
1414 var _subscribers = [ ] ;
@@ -131,7 +131,6 @@ var DailyLeaderboard = (function() {
131131 totalBlocks : Math . max ( 1 , endBlock - startBlock + 1 ) ,
132132 players : { } ,
133133 characters : { } ,
134- characterFetchCache : { } ,
135134 processedBlocks : 0
136135 } ;
137136
@@ -160,7 +159,6 @@ var DailyLeaderboard = (function() {
160159 totalBlocks : Math . max ( 1 , headBlock - _snapshot . windowEndBlock ) ,
161160 players : _cloneObject ( _snapshot . players || { } ) ,
162161 characters : _cloneObject ( _snapshot . characters || { } ) ,
163- characterFetchCache : { } ,
164162 processedBlocks : 0
165163 } ;
166164
@@ -258,103 +256,107 @@ var DailyLeaderboard = (function() {
258256 blockNum : processed . blockNum ,
259257 players : { }
260258 } ;
261- var index = 0 ;
262259
263- function nextAction ( ) {
264- if ( index >= vmActions . length ) {
265- DailyLeaderboardStorage . putBlockContribution ( blockContrib , function ( ) {
266- callback ( null ) ;
267- } ) ;
268- return ;
260+ _primeCharactersForActions ( ctx , vmActions , function ( ) {
261+ for ( var i = 0 ; i < vmActions . length ; i ++ ) {
262+ _applyVmAction ( ctx , processed , vmActions [ i ] , blockContrib ) ;
269263 }
270264
271- var vmAction = vmActions [ index ++ ] ;
272- _applyVmAction ( ctx , processed , vmAction , blockContrib , nextAction ) ;
273- }
274-
275- nextAction ( ) ;
265+ DailyLeaderboardStorage . putBlockContribution ( blockContrib , function ( ) {
266+ callback ( null ) ;
267+ } ) ;
268+ } ) ;
276269 }
277270
278- function _applyVmAction ( ctx , processed , vmAction , blockContrib , callback ) {
271+ function _applyVmAction ( ctx , processed , vmAction , blockContrib ) {
279272 var sender = vmAction . sender ;
280273 var action = vmAction . action ;
281274
282- _ensureCharacter ( ctx , sender , action , function ( ) {
283- if ( ! action ) {
284- callback ( ) ;
285- return ;
286- }
287-
288- if ( action . type === VizMagicConfig . ACTION_TYPES . CHAR_ATTUNE ) {
289- _handleCharAttune ( ctx , sender , action . data || { } ) ;
290- callback ( ) ;
291- return ;
292- }
275+ if ( ! action ) return ;
293276
294- if ( action . type === VizMagicConfig . ACTION_TYPES . HUNT ) {
295- _handleHunt ( ctx , sender , action . data || { } , processed , blockContrib ) ;
296- callback ( ) ;
297- return ;
298- }
277+ if ( action . type === VizMagicConfig . ACTION_TYPES . CHAR_ATTUNE ) {
278+ _handleCharAttune ( ctx , sender , action . data || { } ) ;
279+ return ;
280+ }
299281
300- if ( action . type === VizMagicConfig . ACTION_TYPES . HUNT_ARMAGEDDON ) {
301- _handleArmageddon ( ctx , sender , action . data || { } , processed , blockContrib ) ;
302- callback ( ) ;
303- return ;
304- }
282+ if ( action . type === VizMagicConfig . ACTION_TYPES . HUNT ) {
283+ _handleHunt ( ctx , sender , action . data || { } , processed , blockContrib ) ;
284+ return ;
285+ }
305286
306- callback ( ) ;
307- } ) ;
287+ if ( action . type === VizMagicConfig . ACTION_TYPES . HUNT_ARMAGEDDON ) {
288+ _handleArmageddon ( ctx , sender , action . data || { } , processed , blockContrib ) ;
289+ }
308290 }
309291
310- function _ensureCharacter ( ctx , account , action , callback ) {
292+ function _primeCharactersForActions ( ctx , vmActions , callback ) {
311293 callback = callback || function ( ) { } ;
312- if ( ! account ) {
313- callback ( ) ;
314- return ;
315- }
316- if ( ctx . characters [ account ] ) {
317- callback ( ) ;
318- return ;
319- }
320294
321- if ( action && action . type === VizMagicConfig . ACTION_TYPES . CHAR_ATTUNE && action . data && action . data . class ) {
322- _handleCharAttune ( ctx , account , action . data ) ;
323- callback ( ) ;
324- return ;
295+ var accountsToFetch = [ ] ;
296+ var seen = { } ;
297+
298+ for ( var i = 0 ; i < vmActions . length ; i ++ ) {
299+ var sender = vmActions [ i ] . sender ;
300+ var action = vmActions [ i ] . action ;
301+ if ( ! sender || ctx . characters [ sender ] || seen [ sender ] ) continue ;
302+
303+ if ( action && action . type === VizMagicConfig . ACTION_TYPES . CHAR_ATTUNE && action . data && action . data . class ) {
304+ _handleCharAttune ( ctx , sender , action . data ) ;
305+ continue ;
306+ }
307+
308+ seen [ sender ] = true ;
309+ accountsToFetch . push ( sender ) ;
325310 }
326311
327- if ( ctx . characterFetchCache [ account ] === 'pending' ) {
328- setTimeout ( function ( ) { _ensureCharacter ( ctx , account , action , callback ) ; } , 25 ) ;
312+ if ( ! accountsToFetch . length ) {
313+ callback ( ) ;
329314 return ;
330315 }
331316
332- ctx . characterFetchCache [ account ] = 'pending' ;
333- VizAccount . getAccount ( account , function ( err , accountData ) {
334- var character = null ;
335- if ( ! err && accountData ) {
336- var grimoire = VizAccount . parseGrimoire ( accountData ) ;
337- if ( grimoire && grimoire . class ) {
338- character = CharacterSystem . createCharacter ( account , grimoire . name || account , grimoire . class ) ;
339- if ( character ) {
340- character . level = grimoire . level || character . level ;
341- character . xp = grimoire . xp || 0 ;
342- character . hp = GameFormulas . calculateMaxHp ( character . className , character . level , CharacterSystem . getTotalStat ( character , 'res' ) ) ;
343- character . maxHp = character . hp ;
317+ viz . api . getAccounts ( accountsToFetch , function ( err , response ) {
318+ var byName = { } ;
319+ var i ;
320+ if ( ! err && response && response . length ) {
321+ for ( i = 0 ; i < response . length ; i ++ ) {
322+ if ( response [ i ] && response [ i ] . name ) {
323+ byName [ response [ i ] . name ] = response [ i ] ;
344324 }
345325 }
346326 }
347327
348- if ( ! character ) {
349- character = CharacterSystem . createCharacter ( account , account , 'embercaster' ) ;
328+ for ( i = 0 ; i < accountsToFetch . length ; i ++ ) {
329+ _hydrateCharacter ( ctx , accountsToFetch [ i ] , byName [ accountsToFetch [ i ] ] || null ) ;
350330 }
351331
352- ctx . characters [ account ] = character ;
353- ctx . characterFetchCache [ account ] = 'done' ;
354332 callback ( ) ;
355333 } ) ;
356334 }
357335
336+ function _hydrateCharacter ( ctx , account , accountData ) {
337+ if ( ! account || ctx . characters [ account ] ) return ;
338+
339+ var character = null ;
340+ if ( accountData ) {
341+ var grimoire = VizAccount . parseGrimoire ( accountData ) ;
342+ if ( grimoire && grimoire . class ) {
343+ character = CharacterSystem . createCharacter ( account , grimoire . name || account , grimoire . class ) ;
344+ if ( character ) {
345+ character . level = grimoire . level || character . level ;
346+ character . xp = grimoire . xp || 0 ;
347+ character . hp = GameFormulas . calculateMaxHp ( character . className , character . level , CharacterSystem . getTotalStat ( character , 'res' ) ) ;
348+ character . maxHp = character . hp ;
349+ }
350+ }
351+ }
352+
353+ if ( ! character ) {
354+ character = CharacterSystem . createCharacter ( account , account , 'embercaster' ) ;
355+ }
356+
357+ ctx . characters [ account ] = character ;
358+ }
359+
358360 function _handleCharAttune ( ctx , account , data ) {
359361 var character = CharacterSystem . createCharacter ( account , data . name || account , data . class || 'embercaster' ) ;
360362 if ( character ) {
0 commit comments