IEnumerator CheckFileListMd5(VersionConfig serverVersionConfig, FileUpdateVo versionVo) { string content = File.ReadAllText(versionVo.PersistentPath); VersionConfig persistentVersionConfig = JsonUtility.FromJson <VersionConfig>(content); int persistentVersion = persistentVersionConfig.resVersion; int serverVersion = serverVersionConfig.resVersion; if (serverVersion >= persistentVersion) { bool versionConfigChange = false; FileUpdateVo fileListVo = new FileUpdateVo(AppConst.FileListName, versionVo.Url, versionVo.Random, string.Empty, 100); string fileListMd5 = Util.Md5file(fileListVo.PersistentPath); FileCheckResult checkResult = null; byte[] fileListBytes = null; if (!serverVersionConfig.fileListMd5.Equals(fileListMd5)) { versionConfigChange = true; WWW www = new WWW(fileListVo.FileUrl); yield return(www); if (string.IsNullOrEmpty(www.error)) { string[] fileList = www.text.Split(new[] { Environment.NewLine }, StringSplitOptions.None); List <string> serverFileList = new List <string>(fileList); fileList = File.ReadAllLines(fileListVo.PersistentPath); List <string> persistentFileList = new List <string>(fileList); checkResult = Util.GetChangList(persistentFileList, serverFileList); fileListBytes = www.bytes; } else { UDebug.LogError(string.Format("{0}down failed:{1}", fileListVo.FileUrl, www.error)); yield break; } www.Dispose(); //下载云端list } else if (serverVersion > persistentVersion)//只是version改变了,实际资源没有变,或者上次资源下载好了,但是version写入没有成功 { versionConfigChange = true; } VersionConfig toWriteVersionConfig = versionConfigChange ? serverVersionConfig : null; CheckResourceComplete(toWriteVersionConfig, checkResult, fileListBytes, versionVo); } else { if (GameStateManager.Instance.showGameStateLog) { UDebug.Log("本资源比较超前,不做资源版本更新: " + "persistentVersion" + persistentVersion.ToString() + " serverVersion:" + serverVersion.ToString()); } CheckResourceComplete(null, null, null, versionVo); } yield return(new WaitForEndOfFrame()); }
private static void CreateChangList(string lastFilesPath, string curFilesPath, string changListFilesPath) { string[] lastFiles = File.ReadAllLines(lastFilesPath); string[] curFiles = File.ReadAllLines(curFilesPath); FileCheckResult checkResult = Util.GetChangList(new List <string>(lastFiles), new List <string>(curFiles)); if (File.Exists(changListFilesPath)) { File.Delete(changListFilesPath); } FileStream fs = new FileStream(changListFilesPath, FileMode.Create); StreamWriter sw = new StreamWriter(fs); FileCheckInfo fileCheckInfo; sw.WriteLine("本次热更需要下载量为: " + checkResult.downSize); if (checkResult.AddList.Count > 0) { sw.WriteLine("新增列表:"); } for (int i = 0, length = checkResult.AddList.Count; i < length; i++) { fileCheckInfo = checkResult.AddList[i]; sw.WriteLine(fileCheckInfo.name + "|" + fileCheckInfo.size); } if (checkResult.ChangeList.Count > 0) { sw.WriteLine("改变列表:"); } for (int i = 0, length = checkResult.ChangeList.Count; i < length; i++) { fileCheckInfo = checkResult.ChangeList[i]; sw.WriteLine(fileCheckInfo.name + "|" + fileCheckInfo.size); } if (checkResult.DeleteList.Count > 0) { sw.WriteLine("删除列表:"); } for (int i = 0, length = checkResult.DeleteList.Count; i < length; i++) { fileCheckInfo = checkResult.DeleteList[i]; sw.WriteLine(fileCheckInfo.name + "|" + fileCheckInfo.size); } //清空缓冲区 sw.Flush(); //关闭流 sw.Close(); fs.Close(); }
public static string Describe(FileCheckResult result) { var buf = new StringBuilder(); buf.AppendLine($"Path = [{result.Path}]"); buf.AppendLine($"InvalidHeaderValues = [{result.InvalidHeaderValues}]"); buf.AppendLine($"IsMHFrameCountCorrect = [{result.IsFileHeaderFrameCountCorrect}]"); buf.AppendLine($"IsLastFrameCorrupt = [{result.IsLastFrameCorrupted}]"); buf.AppendLine($"IsLastFramePartial = [{result.IsLastFramePartial}]"); buf.AppendLine($"IsFileEmpty = [{result.IsFileEmpty}]"); buf.AppendLine($"CalculatedFrameCount = [{result.CalculatedFrameCount}]"); return(buf.ToString()); }
public void CheckFileForProblems_OneFrame() { string path; var beamCount = 128u; var sampleCount = 200; var sampleDataSize = beamCount * sampleCount; var frameSize = Marshal.SizeOf <ArisFrameHeader>() + sampleDataSize; using (var stream = CreateFauxStream( ArisFileHeader.ArisFileSignature, fileFrameCount: 1, pingMode: 9, beamCount: 128, sampleCount: 200, framesToAdd: 1)) { Stream fileStream; (fileStream, path) = CreateTestFile(); using (var file = fileStream) { stream.Position = 0; stream.CopyTo(file); } } var expected = new FileCheckResult( path: path, invalidHeaderValues: false, isFileHeaderFrameCountCorrect: true, isLastFrameCorrupted: false, isLastFramePartial: false, isFileEmpty: false, calculatedFrameCount: 1); MatchVoid(CheckFileForProblems(path), onOk: actual => { Console.WriteLine("Expected: " + Describe(expected)); Console.WriteLine("Actual: " + Describe(actual)); Assert.AreEqual(expected, actual); }, onError: errorInfo => Assert.Fail(errorInfo.Text)); }
private static (string path, FileCheckResult expected) CreateFileWithPartialFrame(uint fullFrameCount) { string path; var beamCount = 128u; var sampleCount = 200; var sampleDataSize = beamCount * sampleCount; var frameSize = Marshal.SizeOf <ArisFrameHeader>() + sampleDataSize; using (var stream = CreateFauxStream( ArisFileHeader.ArisFileSignature, fileFrameCount: fullFrameCount + 1, pingMode: 9, beamCount: 128, sampleCount: 200, framesToAdd: fullFrameCount + 1)) { Stream fileStream; (fileStream, path) = CreateTestFile(); using (var file = fileStream) { stream.Position = 0; stream.CopyTo(file); // There's one frame, truncate after its first byte var startOfFrame = file.Length - frameSize; var truncatePosition = startOfFrame + 1; file.SetLength(truncatePosition); } } var expected = new FileCheckResult( path: path, invalidHeaderValues: false, isFileHeaderFrameCountCorrect: false, isLastFrameCorrupted: true, isLastFramePartial: true, isFileEmpty: fullFrameCount < 1, calculatedFrameCount: fullFrameCount + (1.0 / frameSize)); return(path, expected); }
private void CheckResourceComplete(VersionConfig serverVersionConfig, FileCheckResult checkResult, byte[] fileListBytes, FileUpdateVo versionVo) { Hashtable hash = new Hashtable(); hash["checkResult"] = checkResult; hash["serverVersionConfig"] = serverVersionConfig; hash["fileListBytes"] = fileListBytes; hash["versionVo"] = versionVo; if (checkResult != null) //&& checkResult.downSize > 1000)//大于某个值了才提示 { //弹窗,确认之后才能继续更新 GameStateManager.Instance.ShowPop(true, string.Format("有{0}b资源更新,点击确定开始更新!", checkResult.downSize), () => { this.stateMachine.SetState <State_DownResource>(hash); }, GameStateManager.Instance.Quit); } else { this.stateMachine.SetState <State_DownResource>(hash); } }
private List <FileUpdateVo> PrepareDownRes(VersionConfig serverVersionConfig, FileCheckResult checkResult, byte[] fileListBytes, FileUpdateVo versionVo) { string url = versionVo.Url; string random = versionVo.Random; FileUpdateVo fileUpdateVo; string persistentMd5 = null; foreach (FileCheckInfo item in checkResult.DeleteList) { fileUpdateVo = new FileUpdateVo(item.name, url, random, item.md5, item.size); if (File.Exists(fileUpdateVo.PersistentPath)) { File.Delete(fileUpdateVo.PersistentPath); } } List <FileUpdateVo> fileVoList = new List <FileUpdateVo>(); for (int i = 0; i < checkResult.DownList.Count; i++) { FileCheckInfo item = checkResult.DownList[i]; fileUpdateVo = new FileUpdateVo(item.name, url, random, item.md5, item.size); if (File.Exists(fileUpdateVo.PersistentPath)) { persistentMd5 = Util.Md5file(fileUpdateVo.PersistentPath); } else { persistentMd5 = string.Empty; } if (persistentMd5 != fileUpdateVo.Md5)//需要下载 { fileVoList.Add(fileUpdateVo); } } return(fileVoList); }
protected void OnFileCheck(SFVElement e, FileCheckResult res) { string msg; switch (res){ case FileCheckResult.Ok: msg = Catalog.GetString("Ok"); break; case FileCheckResult.NotFound: msg = Catalog.GetString("Not Found"); break; case FileCheckResult.IsDirectory: msg = Catalog.GetString("Is Directory"); break; case FileCheckResult.Failed: msg = Catalog.GetString("Failed!"); break; default: msg = Catalog.GetString("Unknown error!"); break; } if ((verbose) || (res != FileCheckResult.Ok) ) Console.WriteLine ("{0,-40} {1}", e.FileName + "...", msg); }
public override void EnterState(Hashtable hash) { GameStateManager.Instance.GameStateChang(GameStates.DownResource); #if UNITY_EDITOR if (!AssetBundleManager.ResUpdateInEditor) { DownResourceComplete(); return; } #endif FileCheckResult checkResult = (FileCheckResult)hash["checkResult"]; if (checkResult != null) { VersionConfig serverVersionConfig = (VersionConfig)hash["serverVersionConfig"]; byte[] fileListBytes = (byte[])hash["fileListBytes"]; FileUpdateVo versionVo = (FileUpdateVo)hash["versionVo"]; List <FileUpdateVo> fileVoList = PrepareDownRes(serverVersionConfig, checkResult, fileListBytes, versionVo); TaskManager.Instance.StartCoroutine(StartDownRes(serverVersionConfig, fileListBytes, fileVoList, versionVo)); } else { DownResourceComplete(); } }
/// <summary> /// Checks whether this /// </summary> /// <param name="file"></param> /// <param name="localizationService"></param> /// <param name="mustBeImage"></param> /// <returns></returns> public static FileCheckResult CanBeUploaded(this HttpPostedFileBase file, ILocalizationService localizationService, bool mustBeImage = false) { var result = new FileCheckResult { IsOk = true }; var fileName = Path.GetFileName(file.FileName); if (fileName == null) { result.IsOk = false; result.Message = localizationService.GetResourceString("Errors.GenericMessage"); return(result); } // Get the file extension var fileExtension = Path.GetExtension(fileName); // If can't work out extension then just error if (string.IsNullOrWhiteSpace(fileExtension)) { result.IsOk = false; result.Message = localizationService.GetResourceString("Errors.GenericMessage"); return(result); } //Before we do anything, check file size if (file.ContentLength > Convert.ToInt32(ForumConfiguration.Instance.FileUploadMaximumFileSizeInBytes)) { result.IsOk = false; result.Message = localizationService.GetResourceString("Post.UploadFileTooBig"); return(result); } // now check allowed extensions var allowedFileExtensions = ForumConfiguration.Instance.FileUploadAllowedExtensions; if (mustBeImage) { allowedFileExtensions = Constants.ImageExtensions; result.IsImage = true; } if (!string.IsNullOrWhiteSpace(allowedFileExtensions)) { // Turn into a list and strip unwanted commas as we don't trust users! var allowedFileExtensionsList = allowedFileExtensions.ToArray(',', true); // Remove the dot then check against the extensions in the web.config settings fileExtension = fileExtension.TrimStart('.'); if (!allowedFileExtensionsList.Contains(fileExtension)) { result.IsOk = false; result.Message = localizationService.GetResourceString("Post.UploadBannedFileExtension"); return(result); } } else { result.IsOk = false; result.Message = "Unable to get allowed extensions"; return(result); } // All Good if here result.FileName = fileName; result.FileExtension = fileExtension; return(result); }
protected void OnFileCheck(SFVElement e, FileCheckResult res) { if (this.FileCheck != null){ this.FileCheck (e, res); } }
protected void OnFileEvent(SFVElement e, FileCheckResult r) { if (this.FileCheck != null) this.FileCheck (e, r); }