internal void Update(ICachableBundle data, IAccessPoint dir) { BundleInfo.Apply(data); var path = dir.ToLocation(BundleInfo.Path); FileInfo = new FileInfo(path.FullPath); }
/// <summary> /// キャッシュとバージョンの書き込み /// </summary> public virtual void Save(ICachableBundle data) { // ファイルの書き込み if (OnSaveVersion?.Invoke(data) ?? false) { SaveVersion(data); } }
/// <summary> /// 取得 /// </summary> public string GetVersion(ICachableBundle bundle) { var value = Get(bundle); if (value != null) { return(value.BundleInfo.Version); } return(string.Empty); }
/// <summary> /// 保存バージョンを破棄 /// </summary> private void RemoveVersion(ICachableBundle data) { IsDirty = true; ChipstarLog.Log_RemoveLocalVersion(data); var storageData = Get(data); if (storageData == null) { return; } m_runtimeTable.Remove(data.Identifier); }
/// <summary> /// アセットバンドルの削除 /// </summary> private void DeleteBundle(ICachableBundle data) { var location = GetSaveLocation(data); var path = location.FullPath; if (!File.Exists(path)) { // 存在しないなら削除しない return; } ChipstarLog.Log_DeleteLocalBundle(data); File.Delete(path); }
internal bool IsBreak(ICachableBundle data) { if (FileInfo == null || !FileInfo.Exists) { return(true); } if (data.PreviewSize != FileInfo.Length) { return(true); } return(false); }
public bool IsBreakFile(ICachableBundle bundleData) { var data = Get(bundleData); if (data == null) { // まだ持ってない return(false); } var isBreak = data.IsBreak(bundleData); if (isBreak) { ChipstarLog.Log_MaybeFileBreak(data.FileInfo, bundleData.PreviewSize); } return(isBreak); }
/// <summary> /// バージョンの保存 /// </summary> private void SaveVersion(ICachableBundle data) { IsDirty = true; ChipstarLog.Log_SaveLocalVersion(data); // ストレージにあるかどうか var storageData = Get(data); if (storageData != null) { // 情報変更 storageData.DeleteFile(); storageData.Update(data, m_saveDirRoot); return; } // 追加 m_runtimeTable[data.Identifier] = new CachedFileData( new LocalBundleData(data.Identifier, data.Path, data.Hash, data.Crc), m_saveDirRoot ); }
/// <summary> /// キャッシュ保持 /// </summary> public bool HasStorage(ICachableBundle bundleData) { var data = Get(bundleData); if (data == null) { return(false); } // 破損チェック / 一旦サイズチェックだけ if (IsBreakFile(bundleData)) { return(false); } // バージョン不一致 if (!data.IsMatchVersion(bundleData)) { ChipstarLog.Log_MissMatchVersion(bundleData.Path, data.ToString(), bundleData.Hash.ToString()); return(false); } // return(true); }
/// <summary> /// バージョンを上書き /// </summary> public void Apply(ICachableBundle bundle) { Version = bundle.Hash; Crc = bundle.Crc; Path = bundle.Path; }
/// <summary> /// キャッシュ済みかどうか /// </summary> public virtual bool IsMatchVersion(ICachableBundle cache) { return(IsMatchHash(cache.Hash) && IsMatchCRC(cache.Crc)); }
internal static void Log_DeleteLocalBundle(ICachableBundle data) { Log(string.Format("Delete Cache File : {0}", data.Path)); }
internal static void Log_RemoveLocalVersion(ICachableBundle data) { Log(string.Format("Delete File Version : {0}", data.ToString())); }
/// <summary> /// 場所の取得 /// </summary> public IAccessLocation GetSaveLocation(ICachableBundle data) { return(m_saveDirRoot.ToLocation(data.Path)); }
/// <summary> /// 削除 /// </summary> public virtual void Delete(ICachableBundle data) { DeleteBundle(data); RemoveVersion(data); }
/// <summary> /// /// </summary> public static string ToCacheDataStr(this ICachableBundle self) { return(string.Format("{0}[{1}][{2}]", self.Path, self.Hash, self.Crc)); }
internal bool IsMatchVersion(ICachableBundle bundleData) { return(BundleInfo.IsMatchVersion(bundleData)); }
private CachedFileData Get(ICachableBundle bundle) { m_runtimeTable.TryGetValue(bundle.Identifier, out var value); return(value); }