/// <summary> /// Inicializa a carga do cache. /// </summary> private void Start(object userState) { Observer.OnDoWork(userState); _downloader.Clear(); var localVersions = _repository.GetEntryVersions(); var versions = new List <DataEntryVersion>(); var total = 0; var typeNames = new List <Reflection.TypeName>(); foreach (var i in _typeNames.Concat(_manager).OrderBy(f => f.FullName).ToArray()) { var version = localVersions.Where(f => Colosoft.Reflection.TypeName.TypeNameEqualityComparer.Instance.Equals(f.TypeName, i)).FirstOrDefault(); if (version == null) { version = new DataEntryVersion { TypeName = i, Version = DateTime.MinValue } } ; _downloader.Add(version); typeNames.Add(i); total++; } _downloader.RunAsync(userState); _allDone.WaitOne(); _itemsLoader = new ItemsLoader(this, typeNames); _started = true; }
/// <summary> /// Libera a instancia. /// </summary> /// <param name="disposing"></param> protected virtual void Dispose(bool disposing) { if (_itemsLoader != null) { _itemsLoader.Dispose(); _itemsLoader = null; } }
private void Load() { ItemsLoader loader = gameObject.AddComponent <ItemsLoader>(); int itemsCount = Random.Range(_itemsCountMin, _itemsCountMax); ItemsLoaderRequest request = new ItemsLoaderRequest(Values.ItemsUrl, itemsCount); _loadingIndicator.enabled = true; loader.LoadItemsAsync(request, OnItemsLoaded); }
/// <summary> /// Libera a instancia. /// </summary> /// <param name="disposing"></param> protected virtual void Dispose(bool disposing) { if (_itemsLoader != null) { _itemsLoader.Dispose(); _itemsLoader = null; } _downloader.DownloadCompleted -= Downloader_DownloadCompleted; _downloader.ProgressChanged -= Downloader_ProgressChanged; _downloader.CancelAsync(); if (_allDone != null) { _allDone.Dispose(); _allDone = null; } }
/// <summary> /// Carrega o próximo item do cache. /// </summary> /// <param name="data">Lista ordenada com os dados a serem inseridos</param> /// <param name="index">Objeto de indexeção para saber em que estágio da geração do cache estamos</param> /// <returns>Retorna true enquanto falta objetos para se carregar para o cache</returns> public bool LoadNext(ref OrderedDictionary data, ref object index) { try { if (!_started) { Start(null); } if (_itemsLoader == null) { return(false); } Record record = null; IRecordKeyGenerator generator = null; while (true) { if (!_itemsLoader.MoveNext()) { _itemsLoader.Dispose(); _itemsLoader = null; OnLoadFinish(); return(false); } record = _itemsLoader.Current; generator = _itemsLoader.CurrentGenerator; if (generator == null) { continue; } break; } var key = generator.GetKey(record); var values = new object[record.FieldCount]; for (var i = 0; i < record.FieldCount; i++) { values[i] = record.GetValue(i); } var cacheItem = new ProviderCacheItem(new CacheItemRecord(_itemsLoader.CurrentTypeName, values, record.Descriptor)); cacheItem.AbsoluteExpiration = DateTime.MaxValue; data.Add(key, cacheItem); return(true); } catch { throw; } }
/// <summary> /// Inicializa a carga do cache. /// </summary> private void Start(object userState) { Observer.OnDoWork(userState); var typeNames = _manager.Select(f => f.FullName).ToList(); typeNames.Sort(); IList <ITypeMetadata> metadata = null; if (_typesMetadata != null) { metadata = _typesMetadata; } else { metadata = _typeSchema.GetTypeMetadatas().Where(f => typeNames.BinarySearch(f.FullName) >= 0).ToList(); } _itemsLoader = new ItemsLoader(this, metadata); _started = true; }
public static void Initialize() { var sw = Stopwatch.StartNew(); Styles = new AvailableStylesDataLoader().Load(); CreationData = new CreationDataLoader().Load(); Skills = new SkillsLoader().Load(); Mobs = new MobsLoader().Load(); Npcs = new NpcsLoader().Load(); MobSkills = new MobSkillsLoader().Load(); Strings = new StringLoader().Load(); Quests = new QuestsLoader().Load(); Quizzes = new QuizzesLoader().Load(); Maps = new MapsLoader().Load(); Items = new ItemsLoader().Load(); WzFile?.Dispose(); sw.Stop(); Logger.Information("Data loaded in {0}ms.", sw.ElapsedMilliseconds); }