/// <summary> /// Initializes a new instance of the FileSystemWatcherDirectoryWatcher class. /// </summary> /// <param name="path">Full requested path.</param> /// <param name="utility">Path utility.</param> internal FileSystemWatcherDirectoryWatcher(string path, IPathUtility utility) { this.Path = utility.GetExistDirectoryOrParentDirectory(path); if (!string.IsNullOrWhiteSpace(this.Path)) { this.watcher = new FileSystemWatcher(this.Path); this.watcher.NotifyFilter = NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.LastWrite | NotifyFilters.Size; this.watcher.IncludeSubdirectories = true; this.watcher.Created += this.OnCreated; this.watcher.Changed += this.OnChanged; this.watcher.Deleted += this.OnDeleted; this.watcher.Renamed += this.OnRenamed; this.watcher.EnableRaisingEvents = true; lock (FileLockObject.Instance) { if (this.WatcherModel.CreatedTimer != null) { return; } this.WatcherModel.CreatedTimer = new Timer(this.CreatedTimerChanged, null, Timeout.Infinite, Timeout.Infinite); this.WatcherModel.ChangedTimer = new Timer(this.ChangedTimerChanged, null, Timeout.Infinite, Timeout.Infinite); this.WatcherModel.DeletedTimer = new Timer(this.DeletedTimerChanged, null, Timeout.Infinite, Timeout.Infinite); this.WatcherModel.RenamedTimer = new Timer(this.RenamedTimerChanged, null, Timeout.Infinite, Timeout.Infinite); } } }
public ButtonData(IButtonType type, IPathUtility pathUtility, string controllerName) { _type = type; _pathUtility = pathUtility; ControllerName = controllerName; Text = type.Name; Visible = true; }
/// <summary> /// Initializes a new instance of the <see cref="ConsoleValidator"/> class. /// </summary> /// <param name="logger">The logger.</param> /// <param name="settings">The settings.</param> /// <param name="fileUtility">The file utility.</param> /// <param name="directoryUtility">The directory utility.</param> /// <param name="pathUtility">The path utility.</param> public ConsoleValidator( ILogger logger, IHyperValidatorSettings settings, IFileUtility fileUtility, IDirectoryUtility directoryUtility, IPathUtility pathUtility) { Logger = logger; Settings = settings; FileUtility = fileUtility; DirectoryUtility = directoryUtility; PathUtility = pathUtility; }
/// <summary> /// 存放在StreamingAssets下的本地初始文件 /// </summary> private void InitStreamingAssetData() { if (!File.Exists(IPathUtility.GetLocalVersionFilePath())) { MDebug.Log(LOG_TAG, "No local resource file in PersistentPath ,Initialize the local resource file!"); m_InitAndDownloading?.Invoke(m_InitStateTitle, 0); Kernel.Mono.StartCoroutine(WWWLoadStreamingVersionFile(IPathUtility.GetWWWStreamingVersionFile(), OnStreamingVersionFileLoadOver)); } else { MDebug.Log(LOG_TAG, "local resource file in PersistentPath Exist! So Checking remote Data From Server!"); CheckServerVersion(); } }
/// <summary> /// Initializes a new instance of the <see cref="GameRepository"/> class. /// </summary> /// <param name="settings">The settings.</param> /// <param name="logger">The logger.</param> /// <param name="directoryUtility">The directory utility.</param> /// <param name="fileUtility">The file utility.</param> /// <param name="pathUtility">The path utility.</param> /// <param name="consoleSerializer">The console serializer.</param> public GameRepository( IHyperValidatorSettings settings, ILogger logger, IDirectoryUtility directoryUtility, IFileUtility fileUtility, IPathUtility pathUtility, IConsoleSerializer consoleSerializer) { Settings = settings; Logger = logger; DirectoryUtility = directoryUtility; FileUtility = fileUtility; PathUtility = pathUtility; ConsoleSerializer = consoleSerializer; }
/// <summary> /// 初始化相关配置,外部调用 /// </summary> /// <param name="initializeData"></param> /// <returns></returns> public IEnumerator InitializeAsync(KernelInitializeData initializeData) { IPathUtility.ServerDownloadUrl = initializeData.ServerDownLoadUrl; IPathUtility.VersionFilePath = initializeData.AssetVersionFileName; m_UpdatingStateTitle = initializeData.UpdatingStateTitle; m_UpdateFinishTitle = initializeData.UpdateFinishTitle; m_ServerVersionFilePath = IPathUtility.GetServerDownloadVersionFilePath(); m_DownloadTimeOut = initializeData.DownloadTimeOut; m_DownloadMaxRoutineCount = initializeData.DownloadMaxRoutineCount; m_RoutineArray = new TempDownloadRoutine[m_DownloadMaxRoutineCount]; yield return(null); // 恢复Update SetEnable(true); }
/// <summary> /// Initializes a new instance of the <see cref="SystemRepository" /> class. /// </summary> /// <param name="settings">The settings.</param> /// <param name="logger">The logger.</param> /// <param name="directoryUtility">The directory utility.</param> /// <param name="fileUtility">The file utility.</param> /// <param name="pathUtility">The path utility.</param> /// <param name="consoleRepository">The console repository.</param> public SystemRepository( IHyperValidatorSettings settings, ILogger logger, IDirectoryUtility directoryUtility, IFileUtility fileUtility, IPathUtility pathUtility, IConsoleRepository consoleRepository) { Settings = settings; Logger = logger; DirectoryUtility = directoryUtility; FileUtility = fileUtility; PathUtility = pathUtility; ConsoleRepository = consoleRepository; }
/// <summary> /// Initializes a new instance of the FileSystemWatcherDirectoryWatcher class. /// </summary> /// <param name="path">Full requested path.</param> /// <param name="utility">Path utility.</param> internal FileSystemWatcherDirectoryWatcher(string path, IPathUtility utility) { this.Path = utility.GetExistDirectoryOrParentDirectory(path); if (!string.IsNullOrWhiteSpace(this.Path)) { this.watcher = new FileSystemWatcher(this.Path); this.watcher.NotifyFilter = NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.LastWrite | NotifyFilters.Size; this.watcher.IncludeSubdirectories = true; this.watcher.Created += this.OnCreated; this.watcher.Changed += this.OnChanged; this.watcher.Deleted += this.OnDeleted; this.watcher.Renamed += this.OnRenamed; this.watcher.EnableRaisingEvents = true; } }
/// <summary> /// 回调 /// 解析服务端配置文件字符串 /// </summary> /// <param name="obj"></param> private void ServerDownloadDataCallBack(string content) { MDebug.Log(LOG_TAG, $"Checking ServerVersionFile Complete! Content of VersionFile :{content}"); m_ServerDataList = GetDownloadDataListFromText(content); m_ServerDataDic = GetFileNameToMD5Dic(m_ServerDataList); m_DataNeedToDownloadList = new List <DownloadDataEntity>(); if (File.Exists(IPathUtility.GetLocalVersionFilePath())) { m_LocalDataList = GetDownloadDataListFromText(File.ReadAllText(IPathUtility.GetLocalVersionFilePath())); m_localDataDic = GetFileNameToMD5Dic(m_LocalDataList); if (m_ServerDataList != null) { for (int i = 0; i < m_ServerDataList.Count; i++) { if (!m_localDataDic.ContainsKey(m_ServerDataList[i].FileName)) { m_DataNeedToDownloadList.Add(m_ServerDataList[i]); } else { if (!m_localDataDic[m_ServerDataList[i].FileName].Equals(m_ServerDataList[i].MD5)) { m_DataNeedToDownloadList.Add(m_ServerDataList[i]); } } } } } else { m_LocalDataList = new List <DownloadDataEntity>(m_ServerDataList.Count); m_localDataDic = new Dictionary <string, string>(); if (m_ServerDataList != null) { for (int i = 0; i < m_ServerDataList.Count; i++) { m_DataNeedToDownloadList.Add(m_ServerDataList[i]); } } } //重置 Kernel.DownloadManager.ClearRoutineArray(); //开始下载 Kernel.DownloadManager.DownloadData(m_DataNeedToDownloadList.ToArray()); }
/// <summary> /// Initializes a new instance of the <see cref="ConsoleRepository" /> class. /// </summary> /// <param name="settings">The settings.</param> /// <param name="logger">The logger.</param> /// <param name="directoryUtility">The directory utility.</param> /// <param name="fileUtility">The file utility.</param> /// <param name="pathUtility">The path utility.</param> /// <param name="consoleSerializer">The console serializer.</param> /// <param name="databaseSerializer">The database serializer.</param> /// <param name="gameValidator">The game validator.</param> /// <param name="consoleValidator">The console validator.</param> public ConsoleRepository( IHyperValidatorSettings settings, ILogger logger, IDirectoryUtility directoryUtility, IFileUtility fileUtility, IPathUtility pathUtility, IConsoleSerializer consoleSerializer, IDatabaseSerializer databaseSerializer, IGameValidator gameValidator, IConsoleValidator consoleValidator) { Settings = settings; Logger = logger; DirectoryUtility = directoryUtility; FileUtility = fileUtility; PathUtility = pathUtility; ConsoleSerializer = consoleSerializer; DatabaseSerializer = databaseSerializer; GameValidator = gameValidator; ConsoleValidator = consoleValidator; }
private IEnumerator LocalAssetDataLoad(List <DownloadDataEntity> dataList) { if (File.Exists(IPathUtility.GetLocalVersionFilePath())) { File.Delete(IPathUtility.GetLocalVersionFilePath()); } if (dataList != null) { for (int i = 0; i < dataList.Count; i++) { //相对路径文件名 string fileName = dataList[i].FileName; string fileLoadPath = IPathUtility.GetWWWStreamingPath() + fileName; string filePersistentPath = IPathUtility.GetLocalFilePathPrefix() + fileName; string versionText = $"{fileName} {dataList[i].MD5} {dataList[i].Size}"; yield return(LocalAssetDataLoad(fileLoadPath, filePersistentPath, versionText)); m_InitAndDownloading?.Invoke(m_InitStateTitle, ((float)(i + 1) / dataList.Count)); MDebug.Log(LOG_TAG, $"Initialization of the local resource file is complete! FileName:{fileName},Current:{i+1},Total:{dataList.Count}"); } } CheckServerVersion(); }
/// <summary> /// 拷贝文件到本地 /// </summary> /// <param name="filePath"></param> /// <param name="localPath"></param> /// <returns></returns> private IEnumerator LocalAssetDataLoad(string fileLoadPath, string filePersistentPath, string versionText) { MDebug.Log(LOG_TAG, $"LocalAssetDataLoad,fileLoadPath:{fileLoadPath},filePersistentPath:{filePersistentPath},versionText:{versionText}"); using (UnityWebRequest data = UnityWebRequest.Get(fileLoadPath)) { yield return(data.SendWebRequest()); if (string.IsNullOrEmpty(data.error)) { byte[] content = data.downloadHandler.data; string filePersistentParentFolderPath = Path.GetDirectoryName(filePersistentPath); MDebug.Log(LOG_TAG, $"filePersistentParentFolderPath:{filePersistentParentFolderPath}"); if (!Directory.Exists(filePersistentParentFolderPath)) { Directory.CreateDirectory(filePersistentParentFolderPath); } using (FileStream fs = File.Create(filePersistentPath, content.Length)) { fs.Write(content, 0, content.Length); fs.Flush(); fs.Close(); } using (FileStream fs = new FileStream(IPathUtility.GetLocalVersionFilePath(), FileMode.OpenOrCreate, FileAccess.Write)) { using (StreamWriter sw = new StreamWriter(fs)) { sw.BaseStream.Seek(0, SeekOrigin.End); sw.WriteLine(versionText); sw.Flush(); sw.Close(); } fs.Close(); } MDebug.Log(LOG_TAG, $"LocalAssetDataLoad,filePersistentPath:{filePersistentPath} Generate Success!"); } } }
public FileSystemScanner() { _pathUtility = new PathUtility(); _win32IO = new Win32IO(); }
public IEnumerator DownloadData(TempAssetInitManager.DownloadDataEntity data) { MDebug.Log(LOG_TAG, $"Data Begin to be Download! FileName:{data.FileName},MD5:{data.MD5},Size:{data.Size}"); string fileDownLoadUrl = IPathUtility.GetServerDownloadPath() + data.FileName; using (UnityWebRequest request = UnityWebRequest.Get(fileDownLoadUrl)) { UnityWebRequestAsyncOperation asyOperation = request.SendWebRequest(); while (asyOperation != null && !asyOperation.isDone) { long calculateDownloadSize = (long)Math.Ceiling(data.Size * asyOperation.progress); m_SizeOfDownloadingData = calculateDownloadSize; yield return(null); } yield return(asyOperation); if (string.IsNullOrEmpty(request.error)) { string targetFilePath = IPathUtility.GetLocalFilePathPrefix() + data.FileName; FileUtility.CreateFile(targetFilePath, request.downloadHandler.data); string newFileMD5 = FileUtility.GetFileMD5(targetFilePath); //MD5 if (!newFileMD5.Equals(data.MD5)) { MDebug.LogError(LOG_TAG, $"New File MD5 Is Not Equals With DownloadData! FileName:{data.FileName},FileMD5:{newFileMD5},DataMD5:{data.MD5}"); m_CurrentDownloadCoroutine = null; m_SizeOfDownloadingData = data.Size; IsAllDataDownloadFinish = false; m_RoutineAssetFinishCallBack?.Invoke(false, TotalFinishCount, TotalFinishSize); m_IsDownloading = true; MDebug.LogError(LOG_TAG, $"DownloadData file stop! FileName:{data.FileName} Reason:{request.error}"); yield break; } TotalFinishCount++; m_SizeOfDownloadingData = data.Size; m_SizeOfDownloadedData += m_SizeOfDownloadingData; m_SizeOfDownloadingData = 0; m_DownLoadDataQueue.Dequeue(); MDebug.Log(LOG_TAG, $"DownloadData has been Downloaded Success! FileName:{data.FileName},TargetFilePath:{targetFilePath}"); m_SingleAssetDownloadSuccessCallBack?.Invoke(data); if (m_DownLoadDataQueue.Count > 0) { m_IsDownloading = false; IsAllDataDownloadFinish = false; m_CurrentDownloadCoroutine = null; } else { LastestDownloadTotalCount = TotalFinishCount; LastestDownloadTotalSize = TotalFinishSize; m_RoutineAssetFinishCallBack?.Invoke(true, TotalFinishCount, TotalFinishSize); ClearAllState(); IsAllDataDownloadFinish = true; MDebug.Log(LOG_TAG, "All AssetData has been Downloaded!"); } } else { m_CurrentDownloadCoroutine = null; m_SizeOfDownloadingData = data.Size; IsAllDataDownloadFinish = false; m_RoutineAssetFinishCallBack?.Invoke(false, TotalFinishCount, TotalFinishSize); m_IsDownloading = true; MDebug.LogError(LOG_TAG, $"DownloadData file stop! FileName:{data.FileName} Reason:{request.error}"); } } }
/// <summary> /// Constructs a <see cref="FileEnumerator"/> /// </summary> /// <param name="fileSystem"></param> /// <param name="pathUtility"></param> public FileEnumerator(IFileSystem fileSystem, IPathUtility pathUtility) { this.fileSystem = fileSystem; this.pathUtility = pathUtility; }
public FileSystemManager(IPathUtility paths, IFileSystemScanner scanner, IWin32IO win32IO) { _paths = paths; _scanner = scanner; _win32IO = win32IO; }
public FileSystemManager() { _paths = new PathUtility(); _win32IO = new Win32IO(); _scanner = new FileSystemScanner(_paths, _win32IO); }
public ActionMethodDefinitionFactory(IPathUtility pathUtility) { if (pathUtility == null) throw new ArgumentNullException("pathUtility"); _pathUtility = pathUtility; }
public FileSystemScanner(IPathUtility pathUtility, IWin32IO win32IO) { _pathUtility = pathUtility; _win32IO = win32IO; }
public void BeforeEachTest() { _pathUtility = new TestPathUtility(); Configuration.PathUtility = _pathUtility; }
public ButtonData(IButtonType type, IPathUtility pathUtility) : this(type, pathUtility, null) { }
public void BeforeEachTest() { _pathUtility = MockRepository.GenerateMock<IPathUtility>(); _buttonData = new ButtonData(ButtonData.ButtonType.Delete, _pathUtility, "Delete"); }