コード例 #1
0
ファイル: DirectoryWatcher.cs プロジェクト: RuhuiCheng/Talent
        /// <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);
                }
            }
        }
コード例 #2
0
 public ButtonData(IButtonType type, IPathUtility pathUtility, string controllerName)
 {
     _type = type;
     _pathUtility = pathUtility;
     ControllerName = controllerName;
     Text = type.Name;
     Visible = true;
 }
コード例 #3
0
 /// <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;
 }
コード例 #4
0
 /// <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();
     }
 }
コード例 #5
0
 /// <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;
 }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
 /// <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;
 }
コード例 #8
0
        /// <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;
            }
        }
コード例 #9
0
 /// <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());
 }
コード例 #10
0
 /// <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;
 }
コード例 #11
0
        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();
        }
コード例 #12
0
        /// <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!");
                }
            }
        }
コード例 #13
0
		public FileSystemScanner() {

			_pathUtility = new PathUtility();
			_win32IO = new Win32IO();
		}
コード例 #14
0
        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}");
                }
            }
        }
コード例 #15
0
 /// <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;
 }
コード例 #16
0
 public FileSystemScanner()
 {
     _pathUtility = new PathUtility();
     _win32IO     = new Win32IO();
 }
コード例 #17
0
		public FileSystemManager(IPathUtility paths, IFileSystemScanner scanner, IWin32IO win32IO) {

			_paths = paths;
			_scanner = scanner;
			_win32IO = win32IO;
		}
コード例 #18
0
		public FileSystemManager() {

			_paths = new PathUtility();
			_win32IO = new Win32IO();
			_scanner = new FileSystemScanner(_paths, _win32IO);
		}
コード例 #19
0
		public ActionMethodDefinitionFactory(IPathUtility pathUtility)
		{
			if (pathUtility == null) throw new ArgumentNullException("pathUtility");

			_pathUtility = pathUtility;
		}
コード例 #20
0
 public FileSystemScanner(IPathUtility pathUtility, IWin32IO win32IO)
 {
     _pathUtility = pathUtility;
     _win32IO     = win32IO;
 }
コード例 #21
0
 public FileSystemManager(IPathUtility paths, IFileSystemScanner scanner, IWin32IO win32IO)
 {
     _paths   = paths;
     _scanner = scanner;
     _win32IO = win32IO;
 }
コード例 #22
0
 public FileSystemManager()
 {
     _paths   = new PathUtility();
     _win32IO = new Win32IO();
     _scanner = new FileSystemScanner(_paths, _win32IO);
 }
コード例 #23
0
ファイル: LinkTest.cs プロジェクト: mvbalaw/FluentWebControls
 public void BeforeEachTest()
 {
     _pathUtility = new TestPathUtility();
     Configuration.PathUtility = _pathUtility;
 }
コード例 #24
0
 public ButtonData(IButtonType type, IPathUtility pathUtility)
     : this(type, pathUtility, null)
 {
 }
コード例 #25
0
		public FileSystemScanner(IPathUtility pathUtility, IWin32IO win32IO) {

			_pathUtility = pathUtility;
			_win32IO = win32IO;
		}
コード例 #26
0
 public void BeforeEachTest()
 {
     _pathUtility = MockRepository.GenerateMock<IPathUtility>();
     _buttonData = new ButtonData(ButtonData.ButtonType.Delete, _pathUtility, "Delete");
 }