示例#1
0
        /// <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;
        }
示例#2
0
 /// <summary>
 /// Libera a instancia.
 /// </summary>
 /// <param name="disposing"></param>
 protected virtual void Dispose(bool disposing)
 {
     if (_itemsLoader != null)
     {
         _itemsLoader.Dispose();
         _itemsLoader = null;
     }
 }
示例#3
0
        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);
        }
示例#4
0
 /// <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;
     }
 }
示例#5
0
 /// <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;
     }
 }
示例#6
0
        /// <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;
        }
示例#7
0
        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);
        }