コード例 #1
0
    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());
    }
コード例 #2
0
ファイル: RhMenu.cs プロジェクト: lsunky/RhFrameWork
    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();
    }
コード例 #3
0
        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());
        }
コード例 #4
0
        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));
        }
コード例 #5
0
        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);
        }
コード例 #6
0
    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);
        }
    }
コード例 #7
0
    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);
    }
コード例 #8
0
 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);
 }
コード例 #9
0
    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();
        }
    }
コード例 #10
0
        /// <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);
        }
コード例 #11
0
 protected void OnFileCheck(SFVElement e, FileCheckResult res)
 {
     if (this.FileCheck != null){
         this.FileCheck (e, res);
     }
 }
コード例 #12
0
ファイル: FVerification.cs プロジェクト: albfernandez/dalle
 protected void OnFileEvent(SFVElement e, FileCheckResult r)
 {
     if (this.FileCheck != null)
         this.FileCheck (e, r);
 }