public void Initialize(string sourceDir, uint numInstallers, bool simulateMode = false) { if (isInitialized) { return; } this.sourceDir = sourceDir; this.simulateMode = Application.isEditor && simulateMode; this.numInstallers = numInstallers; #if ENABLE_CRIWARE_FILESYSTEM installQueueing = new Dictionary <string, CriAssetInstall>(); //------ CriInstaller初期化 ------ var moduleConfig = CriFsWebInstaller.defaultModuleConfig; // 同時インストール数. moduleConfig.numInstallers = numInstallers; // タイムアウト時間. moduleConfig.inactiveTimeoutSec = (uint)TimeoutLimit.TotalSeconds; CriFsWebInstaller.InitializeModule(moduleConfig); Observable.EveryUpdate() .Subscribe(_ => CriFsWebInstaller.ExecuteMain()) .AddTo(Disposable); #endif isInitialized = true; }
public void Dispose() { m_loadCtrl.Dispose(); // Finalize CriFsWebInstaller module CriFsWebInstaller.FinalizeModule(); }
//-------------------------------------------- // 初期化 //-------------------------------------------- #region ===== INIT ===== /// <summary> /// 初期化処理 /// 継承先で何らかの初期化処理が必要な場合はこちらへ /// ※Awake 以外からの呼び出し禁止 /// </summary> protected override void Init() { // Initialize CriFsWebInstaller module CriFsWebInstaller.InitializeModule(CriFsWebInstaller.defaultModuleConfig); m_loadCtrl = new CriPackageLoadController(this, DOWNLOAD_CONCURRENCY); StartCoroutine(m_loadCtrl.LoadManifest("manifest.cpk", "testVer")); }
//-------------------------------------------- // 初期化 //-------------------------------------------- #region ===== INITIALIZE ===== /// <summary> /// コンストラクタ /// </summary> /// <param name="_concurrency">同時インストール可能数</param> public CriPackageDownloadController(int _concurrency) { int concurrency = Mathf.Max(_concurrency, 1); //NonZero m_webInstallers = new CriFsWebInstaller[concurrency]; for (int i = 0; i < concurrency; i++) { m_webInstallers[i] = new CriFsWebInstaller(); } }
protected override void OnRelease() { if (isInitialized) { foreach (var item in installQueueing.Values) { item.Installer.Stop(); item.Installer.Dispose(); } installQueueing.Clear(); CriFsWebInstaller.FinalizeModule(); } }
protected override void OnRelease() { if (isInitialized) { #if ENABLE_CRIWARE_FILESYSTEM foreach (var item in installQueueing.Values) { item.Installer.Stop(); item.Installer.Dispose(); } installQueueing.Clear(); CriFsWebInstaller.FinalizeModule(); #endif } }
private IEnumerator Install(string downloadUrl, string installPath, IProgress <float> progress = null) { var numInstallers = Instance.numInstallers; // 同時インストール数待ち. while (numInstallers <= installCount) { yield return(null); } installCount++; using (Installer = new CriFsWebInstaller()) { Installer.Copy(downloadUrl, installPath); CriFsWebInstaller.StatusInfo statusInfo; while (true) { statusInfo = Installer.GetStatusInfo(); if (progress != null) { progress.Report((float)statusInfo.receivedSize / statusInfo.contentsSize); } if (statusInfo.status != CriFsWebInstaller.Status.Busy) { break; } yield return(null); } if (statusInfo.error != CriFsWebInstaller.Error.None) { throw new Exception(string.Format("[Download Error] {0}\n{1}", AssetInfo.ResourcePath, statusInfo.error)); } } installCount--; }
void Update() { #pragma warning disable 162 if (CriWare.supportsCriFsInstaller == true) { CriFsInstaller.ExecuteMain(); if (CriFsWebInstaller.isInitialized) { CriFsWebInstaller.ExecuteMain(); } } #pragma warning restore 162 for (int i = 0; i < this.requestList.Count; i++) { CriFsRequest request = this.requestList[i]; request.Update(); } this.requestList.RemoveAll((CriFsRequest request) => { return(request.isDone || request.isDisposed); }); }
//-------------------------------------------- // Update //-------------------------------------------- #region ===== UPDATE ===== void Update() { // DL中はこれを常に実行させる CriFsWebInstaller.ExecuteMain(); }
//-------------------------------------------- // Public API //-------------------------------------------- #region ===== PUBLIC_API ===== /// <summary> /// Download 実行 /// </summary> /// <param name="_cpkName">CPK名</param> /// <param name="_versionHashName">CPKのHash値文字列</param> /// <param name="_onComplete">ダウンロード完了コールバック</param> /// <returns></returns> public IEnumerator DonwloadCPK(string _cpkName, string _versionHashName, OnCompleteDownload _onComplete) { string url = CriPackageUtility.GetPackegeURL(_cpkName); // 無効なURL if (string.IsNullOrEmpty(url)) { if (_onComplete != null) { _onComplete.Invoke(false); } yield break; } // Cache上に存在している if (CriPackageCacheController.IsCached(_cpkName, _versionHashName)) { if (_onComplete != null) { _onComplete.Invoke(true); } yield break; } CriFsWebInstaller installer = GetEmptyInstaller(); // 空くまで待機 while (installer == null) { installer = GetEmptyInstaller(); yield return(null); } string outputPath = CriPackageCacheController.GetOutputPath(_cpkName, _versionHashName); // Directory 生成 CriPackageCacheController.CreateAssetCacheDir(_cpkName); // 古いバージョンのキャッシュがあれば削除 CriPackageCacheController.DeleteTargetOtherVersionPackage(_cpkName, _versionHashName); // Download 開始 installer.Copy(url, outputPath); // 終了まで待機 CriFsWebInstaller.StatusInfo info = installer.GetStatusInfo(); while (info.status == CriFsWebInstaller.Status.Busy) { info = installer.GetStatusInfo(); yield return(null); } info = installer.GetStatusInfo(); switch (info.status) { case CriFsWebInstaller.Status.Error: { //エラーによる失敗 if (_onComplete != null) { _onComplete.Invoke(false); } } break; case CriFsWebInstaller.Status.Stop: { // 誰かに止められた if (_onComplete != null) { _onComplete.Invoke(false); } } break; case CriFsWebInstaller.Status.Complete: { // 成功 if (_onComplete != null) { _onComplete.Invoke(true); } } break; } }