def _update(self, triggerEvents, diff): LOG_MX('_update', diff if triggerEvents else 'full sync') isFullSync = diff.get('prevRev', None) is None self.syncData.revision = diff.get('rev', 0) self.inventory.synchronize(isFullSync, diff) self.stats.synchronize(isFullSync, diff) self.questProgress.synchronize(isFullSync, diff) self.trader.synchronize(isFullSync, diff) self.intUserSettings.synchronize(isFullSync, diff) self.__synchronizeEventNotifications(diff) self.__synchronizeCacheDict(self.prebattleAutoInvites, diff.get('account', None), 'prebattleAutoInvites', 'replace', events.onPrebattleAutoInvitesChanged) self.__synchronizeCacheDict(self.prebattleInvites, diff, 'prebattleInvites', 'update', lambda : events.onPrebattleInvitesChanged(diff)) self.__synchronizeCacheDict(self.clanMembers, diff.get('cache', None), 'clanMembers', 'replace', events.onClanMembersListChanged) self.__synchronizeCacheDict(self.eventsData, diff.get('cache', None), 'eventsData', 'replace', events.onEventsDataChanged) synchronizeDicts(diff.get('unitRosters', {}), self.unitRosters) if triggerEvents: events.onClientUpdated(diff) if not isFullSync: for vehTypeCompDescr in diff.get('stats', {}).get('eliteVehicles', ()): events.onVehicleBecomeElite(vehTypeCompDescr) for vehInvID, lockReason in diff.get('cache', {}).get('vehsLock', {}).iteritems(): if lockReason is None: lockReason = AccountCommands.LOCK_REASON.NONE events.onVehicleLockChanged(vehInvID, lockReason) return
def synchronize(self, isFullSync, diff): if isFullSync: self.__cache.clear() for item in ('quests', 'tokens'): itemDiff = diff.get(item, None) if itemDiff is not None: synchronizeDicts(itemDiff, self.__cache.setdefault(item, {})) return
def synchronize(self, isFullSync, diff): if isFullSync: self.__cache.clear() invDiff = diff.get('inventory', None) if invDiff is not None: for itemTypeIdx, itemInvDiff in invDiff.iteritems(): synchronizeDicts(itemInvDiff, self.__cache.setdefault(itemTypeIdx, {})) cacheDiff = diff.get('cache', None) if cacheDiff is not None: vehsLockDiff = cacheDiff.get('vehsLock', None) if vehsLockDiff is not None: itemInvCache = self.__cache.setdefault(_VEHICLE, {}) synchronizeDicts(vehsLockDiff, itemInvCache.setdefault('lock', {})) return
def synchronize(self, isFullSync, diff): if isFullSync: self.__cache.clear() cache = self.__cache statsDiff = diff.get('stats', None) if statsDiff is not None: for stat in _SIMPLE_VALUE_STATS: if stat in statsDiff: cache[stat] = statsDiff[stat] for stat in _DICT_STATS: stat_r = (stat, '_r') if stat_r in statsDiff: cache[stat] = statsDiff[stat_r] if stat in statsDiff: synchronizeDicts(statsDiff[stat], cache.setdefault(stat, dict())) for stat in _GROWING_SET_STATS: stat_r = (stat, '_r') if stat_r in statsDiff: cache[stat] = statsDiff[stat_r] if stat in statsDiff: cache.setdefault(stat, set()).update(statsDiff[stat]) accountDiff = diff.get('account', None) if accountDiff is not None: for stat in _ACCOUNT_STATS: if stat in accountDiff: cache[stat] = accountDiff[stat] economicsDiff = diff.get('economics', None) if economicsDiff is not None: for stat in ('unlocks', 'eliteVehicles'): if stat in economicsDiff: cache.setdefault(stat, set()).update(economicsDiff[stat]) cacheDiff = diff.get('cache', None) if cacheDiff is not None: for stat in ('isFinPswdVerified', 'mayConsumeWalletResources'): if stat in cacheDiff: cache[stat] = cacheDiff[stat] return