Exemple #1
0
        private IEnumerator LoadAsyncCachedBinary(DownloadLicense license)
        {
            byte[]    binary    = new byte[] { };
            Exception exception = null;

            _taskQueue.Enqueue(() =>
            {
                try
                {
                    binary = _modelLoadModule.Load(license);
                }
                catch (Exception ex)
                {
                    exception = ex;
                }
            });

            yield return(WaitFor());

            if (OnProgress != null)
            {
                OnProgress(1.0f);
            }

            if (exception == null)
            {
                LoadVRMFromBinary(binary);
            }
            else if (OnError != null)
            {
                OnError(exception);
            }
        }
Exemple #2
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="license">キャッシュ化されたライセンス情報</param>
 /// <param name="coroutine">コルーチンが実行できるハンドラオブジェクト</param>
 /// <param name="taskQueue">非同期処理をキューを使って実行できる機能を持ったモジュール</param>
 /// <param name="decryptFunc">復号処理を行う関数</param>
 public ModelCachedLoader(DownloadLicense license, ICoroutineHandlable coroutine, ITaskQueue taskQueue, IModelLoadable loadModule)
 {
     _license          = license;
     _coroutineHandler = coroutine;
     _taskQueue        = taskQueue;
     _modelLoadModule  = loadModule;
 }
Exemple #3
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="license">ダウンロードライセンス</param>
 /// <param name="save">モデルを保存する機能を提供するモジュール</param>
 /// <param name="auth">認証機能を持ったモジュール</param>
 /// <param name="timeout">ダウンロードのタイムアウト(秒)</param>
 public ModelDownloadLoader(DownloadLicense license, IModelSavable save, Action <string, int, Action <byte[]>, Action <float>, Action <ApiErrorFormat> > downloadFunc, int timeout)
 {
     _license         = license;
     _modelSaveModule = save;
     _downloadFunc    = downloadFunc;
     _timeout         = timeout;
 }
Exemple #4
0
 /// <summary>
 /// キャッシュしているダウンロードライセンスと、他のダウンロードライセンスで同じモデルデータを使用しているか判定する
 /// </summary>
 /// <remarks>
 /// character_model_idとcharacter_model_versionがそれぞれ一致するか判定している
 /// </remarks>
 /// <param name="otherLicense">他のダウンロードライセンス</param>
 /// <returns>同一のモデルを使用しているか</returns>
 public bool IsSameModel(DownloadLicense otherLicense)
 {
     return(
         downloadLicense.character_model_id == otherLicense.character_model_id &&
         downloadLicense.character_model_version_id == otherLicense.character_model_version_id
         );
 }
Exemple #5
0
 /// <summary>
 /// モデルデータを保存する
 /// </summary>
 /// <param name="license">保存するダウンロードライセンス</param>
 /// <param name="downloadedData">保存するバイナリデータ</param>
 public void Save(DownloadLicense license, byte[] downloadedData)
 {
     if (LocalStorage.HasKey(license.character_model_id))
     {
         CachedLicense before = LocalStorage.GetGenericObject<CachedLicense>(license.character_model_id);
         _deleteFunc(before.filePath);
     }
     var newCachedLicense = new CachedLicense(license);
     _encryptFunc(newCachedLicense.filePath, downloadedData);
     newCachedLicense.Save();
 }
Exemple #6
0
        /// <summary>
        /// モデルデータをロードする
        /// </summary>
        /// <param name="license">ロードに使用するダウンロードライセンス</param>
        /// <returns>ロードしたバイナリデータ</returns>
        /// <exception cref="FileNotFoundException">ファイルが存在しない</exception>
        /// <exception cref="CryptographicException">ファイルの復号に失敗</exception>
        public byte[] Load(DownloadLicense license)
        {
            if (!LocalStorage.HasKey(license.character_model_id))
            {
                throw new FileNotFoundException(string.Format("CharacterModel {0} is not found", license.character_model_id));
            }

            CachedLicense cachedLicense = LocalStorage.GetGenericObject <CachedLicense>(license.character_model_id);

            byte[] binary = _decryptFunc(cachedLicense.filePath);
            cachedLicense.UpdateLastAccessTime();
            cachedLicense.Save();
            return(binary);
        }
Exemple #7
0
 /// <summary>
 /// ローカルストレージ中にキャッシュ情報を保存する
 /// </summary>
 public void UpdateDownloadLicense(DownloadLicense newDownloadLicense)
 {
     downloadLicense = newDownloadLicense;
     filePath        = newDownloadLicense.FileName;
     UpdateLastAccessTime();
 }
Exemple #8
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="license">キャッシュするダウンロードライセンス</param>
 public CachedLicense(DownloadLicense license)
 {
     downloadLicense = license;
     filePath        = license.FileName;
     lastAccessTime  = DateTime.Now.ToLocalTime();
 }