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); } }
/// <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; }
/// <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; }
/// <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 ); }
/// <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(); }
/// <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); }
/// <summary> /// ローカルストレージ中にキャッシュ情報を保存する /// </summary> public void UpdateDownloadLicense(DownloadLicense newDownloadLicense) { downloadLicense = newDownloadLicense; filePath = newDownloadLicense.FileName; UpdateLastAccessTime(); }
/// <summary> /// コンストラクタ /// </summary> /// <param name="license">キャッシュするダウンロードライセンス</param> public CachedLicense(DownloadLicense license) { downloadLicense = license; filePath = license.FileName; lastAccessTime = DateTime.Now.ToLocalTime(); }