Пример #1
0
        IEnumerator CoLoadFile(AssetFileWork file)
        {
            yield return(StartCoroutine(file.CoLoadAsync(timeOutDownload)));

            if (!file.IsLoadError)
            {
                //新たにキャッシュファイル書きこむ必要がある場合
                if (file.FileInfo.IsWriteNewCache && !file.IgnoreLoad)
                {
                    //ロード成功
                    DebugLog("WriteCacheFile:" + file.FileName + " ver:" + file.FileInfo.Version + " cache:" + file.FileInfo.CacheVersion);
                    WriteNewVersion(file);
                }
                //ロード終了処理
                file.LoadComplete();

                //再ロード必要
                if (file.IsLoadRetry)
                {
                    StartCoroutine(CoLoadFile(file));
                }
                else
                {
                    //ロード成功
                    DebugLog("Load End :" + file.FileName + " ver:" + file.FileInfo.Version);
                    loadingFileList.Remove(file);
                    LoadNextFile();
                    MemoryOptimize();
                }
            }
            else
            {
                //ロード失敗
                DebugLogError("Load Failed :" + file.FileName + " ver:" + file.FileInfo.Version + "\n" + file.LoadErrorMsg);

                //リトライ
                if (file.IncLoadErrorRetryCount() < autoRetryCountOnDonwloadError)
                {
                    DebugLog("Load Retry :" + file.FileName + " ver:" + file.FileInfo.Version);
                    StartCoroutine(CoLoadFile(file));
                }
                else
                {
                    if (file.FileInfo.IsCaching)
                    {
                        //キャシュ削除してもう一度DL
                        file.ResetLoadErrorRetryCount();
                        DeleteCacheFileSub(file.FileName);
                        StartCoroutine(CoLoadFile(file));
                    }
                    else
                    {
                        if (null != CallbackError)
                        {
                            CallbackError(file);
                        }
                    }
                }
            }
        }
Пример #2
0
 //ロード待ちリストを追加
 void AddLoadFile(AssetFileWork file)
 {
     if (!LoadFile(file))
     {
         loadWaitFileList.Add(file);
     }
 }
Пример #3
0
        // 管理ファイルを追加
        AssetFileWork AddSub(string path)
        {
            AssetFileWork file;

            if (fileTbl.TryGetValue(path, out file))
            {
                //既にマネージャーの管理下にある
                return(file);
            }
            else
            {
                file = new AssetFileWork(GetFileInfoCreateIfMissing(path), FileIOManger);
                fileTbl.Add(file);
                string ext = System.IO.Path.GetExtension(path).ToLower();
                file.IgnoreLoad |= Array.Exists(ignoreLoadFileTypes, s => (s == ext));
#if true
                if (file.FileInfo.FileType == AssetFileType.UnityObject &&
                    ((file.FileInfo.StrageType == AssetFileStrageType.Web) || (file.FileInfo.StrageType == AssetFileStrageType.WebNocache)))
                {
                    file.IgnoreLoad |= true;
                }
#endif
                return(file);
            }
        }
Пример #4
0
 // プリロード
 void PreloadSub(AssetFileWork file, System.Object referenceObj)
 {
     MoveToUseList(file);
     if (file.ReadyToLoad(AssetFileWork.LoadPriority.Preload, referenceObj))
     {
         RefleshMemSize();
         return;
     }
     AddLoadFile(file);
 }
Пример #5
0
 //ファイルを使用中リストに
 void MoveToUseList(AssetFileWork work)
 {
     if (!usingFileList.Contains(work))
     {
         usingFileList.Add(work);
     }
     if (unuesdFileList.Contains(work))
     {
         unuesdFileList.Remove(work);
     }
     RefleshMemSize();
 }
Пример #6
0
 // ダウンロード
 void DownloadSub(AssetFileWork file)
 {
     if (file.FileInfo.IsWriteNewCache)
     {
         if (file.ReadyToLoad(AssetFileWork.LoadPriority.DownloadOnly, null))
         {
             RefleshMemSize();
             return;
         }
         AddLoadFile(file);
     }
 }
Пример #7
0
        //キャッシュファイル書き込み
        void WriteNewVersion(AssetFileWork file)
        {
            //キャッシュファイル書き込み準備
            file.FileInfo.ReadyToWriteCache(fileInfoTbl.IncCacheID(), GetCacheRootDir(), isDebugCacheFileName);
            string cachePath = file.FileInfo.CachePath;

            //キャッシュ用のディレクトリがなければ作成
            FileIOManger.CreateDirectory(cachePath);

            //ファイル書き込み
            bool ret = false;

            if (file.FileInfo.IsCrypt)
            {
                switch (file.FileInfo.FileType)
                {
                case AssetFileType.Sound:
                    ret = FileIOManger.WriteSound(cachePath, file.WriteCacheFileSound);
                    break;

                case AssetFileType.Texture:
                    ret = FileIOManger.WriteEncodeNoCompress(cachePath, file.CacheWriteBytes);
                    break;

                default:
                    ret = FileIOManger.WriteEncode(cachePath, file.CacheWriteBytes);
                    break;
                }
            }
            else
            {
                ret = FileIOManger.Write(cachePath, file.CacheWriteBytes);
            }

#if UNITY_IPHONE
            iPhone.SetNoBackupFlag(cachePath);
#endif

            //キャッシュファイルテーブルを更新して上書き
            if (!ret)
            {
                DebugLogError("Write Failed :" + file.FileInfo.CachePath);
            }
            else
            {
                WriteCacheTbl();
                file.FileInfo.DeleteOldCacheFile();
            }
        }
Пример #8
0
        // 管理ファイルを追加
        AssetFileWork AddSub(string path)
        {
            AssetFileWork file;

            if (fileTbl.TryGetValue(path, out file))
            {
                //既にマネージャーの管理下にある
                return(file);
            }
            else
            {
                file = new AssetFileWork(GetFileInfoCreateIfMissing(path), FileIOManger);
                fileTbl.Add(file);
                return(file);
            }
        }
Пример #9
0
 //ファイルロード開始(ファイルロード数が上限を超えていたら失敗)
 bool LoadFile(AssetFileWork file)
 {
     if (loadingFileList.Count < loadFileMax)
     {
         if (loadingFileList.Contains(file))
         {
             Debug.LogError(file.Key + " is already loaded");
         }
         loadingFileList.Add(file);
         DebugLog("Load Start :" + file.FileName + " ver:" + file.FileInfo.Version + " cache:" + file.FileInfo.CacheVersion);
         StartCoroutine(CoLoadFile(file));
         return(true);
     }
     else
     {
         return(false);
     }
 }
Пример #10
0
        void LoadNextFile()
        {
            AssetFileWork next = null;

            foreach (AssetFileWork file in loadWaitFileList)
            {
                if (next == null)
                {
                    next = file;
                }
                else
                {
                    if (file.Priority < next.Priority)
                    {
                        next = file;
                    }
                }
            }
            if (next != null)
            {
                loadWaitFileList.Remove(next);
                AddLoadFile(next);
            }
        }
Пример #11
0
 //ファイルリロード
 void ReloadFileSub(AssetFileWork file)
 {
     StartCoroutine(CoLoadFile(file));
 }