Пример #1
0
        private void SaveServerFileListToPersistent()
        {
            string filePath = PathUtility.GetCombinePath(AppConst.Path.PresistentDataPath,
                                                         AppConst.AssetBundleConfig.FileListFile);

            if (newFileInfoTable.Count > 0)
            {
                using (ByteBuffer buffer = new ByteBuffer())
                {
                    ValueParse.WriteValue(buffer, newFileInfoTable.Count, ValueParse.IntParse);
                    foreach (KeyValuePair <string, UpdateFileInfo> updateFileInfo in newFileInfoTable)
                    {
                        ValueParse.WriteValue(buffer, updateFileInfo.Value.AssetBundleName, ValueParse.StringParse);
                        ValueParse.WriteValue(buffer, updateFileInfo.Value.Length, ValueParse.IntParse);
                        ValueParse.WriteValue(buffer, updateFileInfo.Value.Md5Code, ValueParse.IntParse);
                        ValueParse.WriteValue(buffer, updateFileInfo.Value.ZipLength, ValueParse.IntParse);
                        ValueParse.WriteValue(buffer, updateFileInfo.Value.ZipMd5Code, ValueParse.IntParse);
                    }
                    if (FileUtility.IsFileExist(filePath))
                    {
                        FileUtility.DeleteFile(filePath);
                    }
                    File.WriteAllBytes(filePath, buffer.ToBytes());
                }
            }
        }
Пример #2
0
        private void InitInstallVersion(string fileUrl, byte[] bytes, string errorMessage)
        {
            if (bytes == null || bytes.Length == 0)
            {
                throw new Exception("local version.dat file is invalid");
            }
            using (ByteBuffer buffer = new ByteBuffer(bytes))
            {
                platform = Singleton <GameEntry> .GetInstance().GetComponent <ResourceComponent>().PlatformName =
                    ValueParse.ReadValue(buffer, ValueParse.StringParse);

                installVersion =
                    new Version.Version
                {
                    MasterVersion  = ValueParse.ReadValue(buffer, ValueParse.IntParse),
                    MinorVersion   = ValueParse.ReadValue(buffer, ValueParse.IntParse),
                    RevisedVersion = ValueParse.ReadValue(buffer, ValueParse.IntParse)
                };

                installZipDecompressFileCount = ValueParse.ReadValue(buffer, ValueParse.IntParse);
                installZipDecompressSize      = ValueParse.ReadValue(buffer, ValueParse.LongParse);
                Singleton <GameEntry> .GetInstance().GetComponent <ResourceComponent>().AssetBundleVariant =
                    ValueParse.ReadValue(buffer, ValueParse.StringParse);

                ValueParse.ReadValue(buffer, ValueParse.BoolParse);
                installZipDecompressPassword = ValueParse.ReadValue(buffer, ValueParse.StringParse);
            }
            installVersionIsDone = true;
            RefreshInstallDataInfo();
        }
Пример #3
0
        private void SaveServerVersionToPersistent()
        {
            string filePath = PathUtility.GetCombinePath(AppConst.Path.PresistentDataPath,
                                                         AppConst.AssetBundleConfig.VersionFile);

            using (ByteBuffer buffer = new ByteBuffer())
            {
                ValueParse.WriteValue(buffer, platform.ToString(), ValueParse.StringParse);
                ValueParse.WriteValue(buffer, serverVersion.MasterVersion, ValueParse.IntParse);
                ValueParse.WriteValue(buffer, serverVersion.MinorVersion, ValueParse.IntParse);
                ValueParse.WriteValue(buffer, serverVersion.RevisedVersion, ValueParse.IntParse);
                ValueParse.WriteValue(buffer, 0, ValueParse.IntParse);
                ValueParse.WriteValue(buffer, 0, ValueParse.LongParse);
                ValueParse.WriteValue(buffer,
                                      string.IsNullOrEmpty(Singleton <GameEntry> .GetInstance().GetComponent <ResourceComponent>()
                                                           .AssetBundleVariant)
                        ? ""
                        : Singleton <GameEntry> .GetInstance().GetComponent <ResourceComponent>().AssetBundleVariant,
                                      ValueParse.StringParse);
                ValueParse.WriteValue(buffer, true, ValueParse.BoolParse);
                ValueParse.WriteValue(buffer, "", ValueParse.StringParse);
                if (FileUtility.IsFileExist(filePath))
                {
                    FileUtility.DeleteFile(filePath);
                }
                File.WriteAllBytes(filePath, buffer.ToBytes());
            }
        }
Пример #4
0
        /// <summary>
        /// 获取沙河目录下面的文件列表信息
        /// </summary>
        /// <exception cref="Exception"></exception>
        private void LoadPresistentFilelist()
        {
            oldFileInfoTable.Clear();
            string filePath = PathUtility.GetCombinePath(AppConst.Path.PresistentDataPath,
                                                         AppConst.AssetBundleConfig.FileListFile);

            byte[] bytes = FileUtility.ReadAllBytes(filePath);
            if (bytes == null || bytes.Length == 0)
            {
                isUpdateDone = true;
                updateError("获取当前客户端的文件列表信息失败");
                return;
            }

            using (ByteBuffer buffer = new ByteBuffer(bytes))
            {
                fileCount = ValueParse.ReadValue(buffer, ValueParse.IntParse);
                for (int i = 0; i < fileCount; i++)
                {
                    UpdateFileInfo updateFileInfo = new UpdateFileInfo
                    {
                        AssetBundleName = ValueParse.ReadValue(buffer, ValueParse.StringParse),
                        Length          = ValueParse.ReadValue(buffer, ValueParse.IntParse),
                        Md5Code         = ValueParse.ReadValue(buffer, ValueParse.IntParse),
                        ZipLength       = ValueParse.ReadValue(buffer, ValueParse.IntParse),
                        ZipMd5Code      = ValueParse.ReadValue(buffer, ValueParse.IntParse)
                    };
                    oldFileInfoTable.Add(updateFileInfo.AssetBundleName, updateFileInfo);
                }
            }
        }
Пример #5
0
        private void LoadServerVersionCallback(bool isOk, byte[] datas, string errorMessage)
        {
            if (isOk && datas != null && datas.Length > 0)
            {
                using (ByteBuffer buffer = new ByteBuffer(datas))
                {
                    platform = Singleton <GameEntry> .GetInstance().GetComponent <ResourceComponent>().PlatformName =
                        ValueParse.ReadValue(buffer, ValueParse.StringParse);

                    serverVersion = new Version.Version
                    {
                        MasterVersion  = ValueParse.ReadValue(buffer, ValueParse.IntParse),
                        MinorVersion   = ValueParse.ReadValue(buffer, ValueParse.IntParse),
                        RevisedVersion = ValueParse.ReadValue(buffer, ValueParse.IntParse)
                    };
                    Singleton <GameEntry> .GetInstance().GetComponent <ResourceComponent>().AssetBundleVariant =
                        ValueParse.ReadValue(buffer, ValueParse.StringParse);

                    serverBundleIsZip       = ValueParse.ReadValue(buffer, ValueParse.BoolParse);
                    serverBundleZipPassword = ValueParse.ReadValue(buffer, ValueParse.StringParse);
                }
                VersionCompareResult compareResult =
                    Version.Version.CompareResult(serverVersion, currentVersion, false);
                switch (compareResult)
                {
                case VersionCompareResult.Greater:
                    updatePanel.ShowMessageBox(UpdatePanel.enMessageBoxType.YesNo,
                                               UpdateStringConfig.UpdateStatusBeginUpdate,
                                               UpdateStringConfig.UpdateStringHasFatalErrorNeedReinstall,
                                               () =>
                    {
                        OpenAppStore(SingletonMono <GameFramework> .GetInstance().GetAppId());
                        if (Application.isPlaying)
                        {
                            Application.Quit();
                        }
                    }, () =>
                    {
                        if (Application.isPlaying)
                        {
                            Application.Quit();
                        }
                    });
                    break;

                case VersionCompareResult.Equal:
                case VersionCompareResult.Less:
                    UpdateResource();
                    break;
                }
            }
            else
            {
                //获取服务器的版本信息失败
                isUpdateDone = true;
                updateError("获取服务器的版本信息失败");
            }
        }
Пример #6
0
        private static void WriteBytes(FileInfo fileInfo, string destName, Encoding encoding)
        {
            using (StreamReader streamReader = new StreamReader(fileInfo.FullName, encoding))
            {
                string   title    = streamReader.ReadLine();
                string   comment  = streamReader.ReadLine();
                string   mode     = streamReader.ReadLine();
                string[] modes    = SplitLine(mode);
                bool[]   useIndex = new bool[modes.Length];

                for (int i = 0; i < modes.Length; i++)
                {
                    useIndex[i] = modes[i].Equals("A") || modes[i].Equals("C");
                }

                string type = streamReader.ReadLine();
                if (string.IsNullOrEmpty(title) || string.IsNullOrEmpty(comment) || string.IsNullOrEmpty(type))
                {
                    return;
                }
                string[] titles   = RemoveUnuse(SplitLine(title.TrimEnd(eof)), useIndex);
                string[] comments = RemoveUnuse(SplitLine(comment.TrimEnd(eof)), useIndex);
                string[] types    = RemoveUnuse(SplitLine(type.TrimEnd(eof)), useIndex);
                using (ByteBuffer buffer = new ByteBuffer())
                {
                    int lineCount = 0;
                    buffer.Seek(4, SeekOrigin.Begin);
                    while (true)
                    {
                        string line = streamReader.ReadLine();
                        if (string.IsNullOrEmpty(line))
                        {
                            break;
                        }
                        if (line.StartsWith("#"))
                        {
                            continue;
                        }
                        string[] colums = RemoveUnuse(SplitLine(line.TrimEnd(eof)), useIndex);

                        for (int i = 0; i < colums.Length; i++)
                        {
                            AddParseValue(buffer, types[i], colums[i]);
                        }
                        lineCount++;
                    }
                    buffer.Seek(0, SeekOrigin.Begin);
                    ValueParse.WriteValue(buffer, lineCount, ValueParse.IntParse);

                    if (FileUtility.IsFileExist(destName))
                    {
                        FileUtility.DeleteFile(destName);
                    }
                    FileUtility.WriteBytesToFile(destName, buffer.ToBytes());
                }
            }
        }
Пример #7
0
    protected bool ReadSequence <T>(BinaryReader stream, ref Sequence <T> v, ValueParse <T> parse)
    {
        v = new Sequence <T>();
        T v1 = v[0]; T v2 = v[1];

        parse.Read(stream, ref v1);
        parse.Read(stream, ref v2);
        v.Set(v1, v2);
        return(true);
    }
Пример #8
0
        /// <summary>
        /// Decryptors the AES from string to Decimal.
        /// </summary>
        /// <param name="inputvalue">The inputvalue.</param>
        /// <returns>System.String.</returns>
        public static decimal DecryptorAesToDecimal(string inputvalue)
        {
            if (string.IsNullOrWhiteSpace(inputvalue))
            {
                return(0);
            }
            var str = DecryptorAes(Convert.FromBase64String(inputvalue), CODETYPE.GetBytes(KEYARRY.CryptogramKey));
            var res = ValueParse.GetDecimal(str);

            return(res);
        }
Пример #9
0
        private List <JXInvoiceInfo> ToView(List <JXWarnContent> list)
        {
            var invoiceList = new List <JXInvoiceInfo>();

            foreach (var item in list)
            {
                var invoice = new JXInvoiceInfo();
                invoice.InvoiceCode = item.invoiceCode;
                invoice.InvoiceNo   = item.invoiceNo;
                invoice.InvoiceDate = DateTime.ParseExact(item.kprq, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
                invoice.XSFMC       = item.sellerName;
                invoice.SE          = ValueParse.GetDouble(item.taxAmount);
                invoice.HJBHSJE     = ValueParse.GetDouble(item.invoiceAmount);

                invoiceList.Add(invoice);
            }
            return(invoiceList);
        }
Пример #10
0
    protected bool ReadArray <T>(BinaryReader stream, ref T[] v, ValueParse <T> parse)
    {
        byte length = stream.ReadByte();

        if (length > 0)
        {
            v = new T[length];
            for (byte i = 0; i < length; ++i)
            {
                parse.Read(stream, ref v[i]);
            }
        }
        else
        {
            v = null;
        }
        return(true);
    }
Пример #11
0
        /// <summary>
        /// 加载沙河目录的版本文件
        /// </summary>
        /// <exception cref="Exception"></exception>
        private void LoadPresistentVersion()
        {
            string filePath = PathUtility.GetCombinePath(AppConst.Path.PresistentDataPath,
                                                         AppConst.AssetBundleConfig.VersionFile);

            if (FileUtility.IsFileExist(filePath))
            {
                try
                {
                    using (ByteBuffer buffer = new ByteBuffer(FileUtility.ReadFile(filePath)))
                    {
                        platform = Singleton <GameEntry> .GetInstance().GetComponent <ResourceComponent>().PlatformName =
                            ValueParse.ReadValue(buffer, ValueParse.StringParse);

                        currentVersion =
                            new Version.Version
                        {
                            MasterVersion  = ValueParse.ReadValue(buffer, ValueParse.IntParse),
                            MinorVersion   = ValueParse.ReadValue(buffer, ValueParse.IntParse),
                            RevisedVersion = ValueParse.ReadValue(buffer, ValueParse.IntParse)
                        };
                        ValueParse.ReadValue(buffer, ValueParse.IntParse);
                        ValueParse.ReadValue(buffer, ValueParse.LongParse);
                        Singleton <GameEntry> .GetInstance().GetComponent <ResourceComponent>().AssetBundleVariant =
                            ValueParse.ReadValue(buffer, ValueParse.StringParse);

                        ValueParse.ReadValue(buffer, ValueParse.BoolParse);
                        ValueParse.ReadValue(buffer, ValueParse.StringParse);
                    }
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
            else
            {
                isUpdateDone = true;
                updateError("获取获取当前客户端版本信息失败");
            }
        }
Пример #12
0
        private List <JXInvoiceInfo> ToView(List <JXGxrzContent> list)
        {
            var invoiceList = new List <JXInvoiceInfo>();

            foreach (var item in list)
            {
                var invoice = new JXInvoiceInfo();
                invoice.InvoiceCode = item.invoiceCode;
                invoice.InvoiceNo   = item.invoiceNo;
                invoice.InvoiceDate = DateTime.ParseExact(item.kprq, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
                invoice.XSFSH       = item.sellerTaxNo;
                invoice.XSFMC       = item.sellerName;
                invoice.YQTXBZ      = item.warnFlag == "true";
                invoice.SE          = ValueParse.GetDouble(item.taxAmount);
                invoice.HJBHSJE     = ValueParse.GetDouble(item.invoiceAmount);

                int nfpzt = 0;
                Int32.TryParse(item.fpzt, out nfpzt);
                invoice.InvoiceStateDesc = ((InvoiceStatus)nfpzt).GetDescription();//"加载中...";

                invoiceList.Add(invoice);
            }
            return(invoiceList);
        }
Пример #13
0
        /// <summary>
        /// 加载server上的filelist callback
        /// </summary>
        /// <param name="isOk"></param>
        /// <param name="datas"></param>
        /// <param name="errorMessage"></param>
        private void LoadServerFileListCallback(bool isOk, byte[] datas, string errorMessage)
        {
            newFileInfoTable.Clear();
            if (isOk && datas != null && datas.Length > 0)
            {
                using (ByteBuffer buffer = new ByteBuffer(datas))
                {
                    fileCount = ValueParse.ReadValue(buffer, ValueParse.IntParse);
                    for (int i = 0; i < fileCount; i++)
                    {
                        UpdateFileInfo updateFileInfo = new UpdateFileInfo
                        {
                            AssetBundleName = ValueParse.ReadValue(buffer, ValueParse.StringParse),
                            Length          = ValueParse.ReadValue(buffer, ValueParse.IntParse),
                            Md5Code         = ValueParse.ReadValue(buffer, ValueParse.IntParse),
                            ZipLength       = ValueParse.ReadValue(buffer, ValueParse.IntParse),
                            ZipMd5Code      = ValueParse.ReadValue(buffer, ValueParse.IntParse)
                        };
                        newFileInfoTable.Add(updateFileInfo.AssetBundleName, updateFileInfo);
                    }
                }
                DeleteUselessFiles();
                GetDownloadFileList();
                if (!isUpdateDone)
                {
                    BeginDownFile();
                    return;

                    //检查磁盘空间是否满足大小 todo
                    if ((long)Math.Ceiling(totalDownloadSize * 1.1f) > MobileSystemInfo.GetFreeDiskSpace())
                    {
                        //磁盘空间不足
                    }
                    else
                    {
                        if (MobileSystemInfo.NetAvailable)
                        {
                            //运营商网络
                            if (MobileSystemInfo.IsCarrier)
                            {
                                updatePanel.ShowMessageBox(UpdatePanel.enMessageBoxType.CancelOk,
                                                           UpdateStringConfig.UpdateStatusBeginUpdate,
                                                           UpdateStringConfig.UpdateStringHasErrorNotWifi,
                                                           BeginDownFile, () =>
                                {
                                    if (Application.isPlaying)
                                    {
                                        Application.Quit();
                                    }
                                }, UpdateStringConfig.UpdateStatusWifiTips, FormatDownloadSize(totalDownloadSize));
                            }
                            // wi-fi 网络
                            else if (MobileSystemInfo.IsWifi)
                            {
                                //弹出提示框询问是否下载
                                updatePanel.ShowMessageBox(UpdatePanel.enMessageBoxType.CancelOk,
                                                           UpdateStringConfig.UpdateStatusBeginUpdate,
                                                           UpdateStringConfig.UpdateStateStartUpdateInfo,
                                                           BeginDownFile, () =>
                                {
                                    if (Application.isPlaying)
                                    {
                                        Application.Quit();
                                    }
                                }, UpdateStringConfig.UpdateStatusWifiTips, FormatDownloadSize(totalDownloadSize));
                            }
                        }
                    }
                }
            }
            else
            {
                //获取服务器的FileList失败
                isUpdateDone = true;
                updateError("获取服务器最新版本的文件列表信息失败");
            }
        }
Пример #14
0
        private static void ProcessPackage(string workingPath, string tempworkingPath, string packagePath,
                                           AssetBundleBuildRule.Platform platform)
        {
            AssetBundleFileDatas.Clear();
            string packageVersionPath = $"{packagePath}{AppConst.AssetBundleConfig.VersionFile}";
            string assetbundleZipPath = $"{packagePath}{AppConst.AssetBundleConfig.AssetBundlePackageFile}";
            string fileInfoPath       = $"{packagePath}{AppConst.AssetBundleConfig.FileListFile}";

            string[]      allFiles            = Directory.GetFiles(workingPath, "*", SearchOption.AllDirectories);
            List <string> allAssetBundleFiles = new List <string>();

            foreach (string tempFile in allFiles)
            {
                string path = tempFile.Replace("\\", "/");
                if (Path.GetExtension(path) == ".manifest")
                {
                    continue;
                }
                allAssetBundleFiles.Add(path);
            }
            EditorUtility.ClearProgressBar();
            int  index     = 0;
            int  count     = allAssetBundleFiles.Count;
            long sizeCount = 0;

            foreach (string assetBundleFile in allAssetBundleFiles)
            {
                index++;
                EditorUtility.DisplayProgressBar("复制AssetBundle", "复制AssetBundle文件", (float)index / (float)count);
                string target     = assetBundleFile.Replace(workingPath, tempworkingPath);
                string targetPath = Path.GetDirectoryName(target);
                if (!Directory.Exists(targetPath))
                {
                    if (targetPath != null)
                    {
                        Directory.CreateDirectory(targetPath);
                    }
                }
                File.Copy(assetBundleFile, target);

                AssetBundleFileData assetBundleFileData = new AssetBundleFileData();
                byte[] srcBytes  = File.ReadAllBytes(assetBundleFile);
                int    srcLength = srcBytes.Length;
                sizeCount += srcBytes.Length;
                byte[] srcMd5Bytes     = MD5Utility.GetMd5Bytes(srcBytes);
                int    srcMd5Code      = BitConverter.ToInt32(srcMd5Bytes, 0);
                string assetBundleName = target.Replace(tempworkingPath, "");
                assetBundleFileData.AssetBundleName = assetBundleName;
                assetBundleFileData.Length          = srcLength;
                assetBundleFileData.Md5Code         = srcMd5Code;
                assetBundleFileData.ZipLength       = 0;
                assetBundleFileData.ZipMd5Code      = 0;
                AssetBundleFileDatas.Add(assetBundleFileData);
            }
            EditorUtility.ClearProgressBar();
            ZipUtility.CompressFolder(assetbundleZipPath, tempworkingPath, "*", AssetBundleRule.ZipPassWord);
            using (ByteBuffer buffer = new ByteBuffer())
            {
                ValueParse.WriteValue(buffer, platform.ToString(), ValueParse.StringParse);
                ValueParse.WriteValue(buffer, CurrentVersion.MasterVersion, ValueParse.IntParse);
                ValueParse.WriteValue(buffer, CurrentVersion.MinorVersion, ValueParse.IntParse);
                ValueParse.WriteValue(buffer, CurrentVersion.RevisedVersion, ValueParse.IntParse);
                ValueParse.WriteValue(buffer, allAssetBundleFiles.Count, ValueParse.IntParse);
                ValueParse.WriteValue(buffer, sizeCount, ValueParse.LongParse);
                ValueParse.WriteValue(buffer,
                                      string.IsNullOrEmpty(AssetBundleRule.AssetBundleVariant) ? "" : AssetBundleRule.AssetBundleVariant,
                                      ValueParse.StringParse);
                ValueParse.WriteValue(buffer, AssetBundleRule.ZipSelected, ValueParse.BoolParse);
                ValueParse.WriteValue(buffer,
                                      string.IsNullOrEmpty(AssetBundleRule.ZipPassWord) ? "" : AssetBundleRule.ZipPassWord,
                                      ValueParse.StringParse);
                File.WriteAllBytes(packageVersionPath, buffer.ToBytes());
            }

            using (ByteBuffer buffer = new ByteBuffer())
            {
                ValueParse.WriteValue(buffer, AssetBundleFileDatas.Count, ValueParse.IntParse);
                foreach (AssetBundleFileData assetBundleFileData in AssetBundleFileDatas)
                {
                    ValueParse.WriteValue(buffer, assetBundleFileData.AssetBundleName, ValueParse.StringParse);
                    ValueParse.WriteValue(buffer, assetBundleFileData.Length, ValueParse.IntParse);
                    ValueParse.WriteValue(buffer, assetBundleFileData.Md5Code, ValueParse.IntParse);
                    ValueParse.WriteValue(buffer, assetBundleFileData.ZipLength, ValueParse.IntParse);
                    ValueParse.WriteValue(buffer, assetBundleFileData.ZipMd5Code, ValueParse.IntParse);
                }
                File.WriteAllBytes(fileInfoPath, buffer.ToBytes());
            }
        }
Пример #15
0
 protected bool Read <T>(BinaryReader stream, ref T v, ValueParse <T> parse)
 {
     parse.Read(stream, ref v);
     return(true);
 }
Пример #16
0
 private static void AddParseValue(ByteBuffer buffer, string type, string data)
 {
     if (type == "byte")
     {
         byte value = 0;
         byte.TryParse(data, out value);
         ValueParse.WriteValue(buffer, value, ValueParse.ByteParse);
     }
     else if (type == "sbyte")
     {
         sbyte value = 0;
         sbyte.TryParse(data, out value);
         ValueParse.WriteValue(buffer, value, ValueParse.SByteParse);
     }
     else if (type == "bool")
     {
         bool value = false;
         bool.TryParse(data, out value);
         ValueParse.WriteValue(buffer, value, ValueParse.BoolParse);
     }
     else if (type == "char")
     {
         char value = ' ';
         char.TryParse(data, out value);
         ValueParse.WriteValue(buffer, value, ValueParse.CharParse);
     }
     else if (type == "short")
     {
         short value = 0;
         short.TryParse(data, out value);
         ValueParse.WriteValue(buffer, value, ValueParse.ShortParse);
     }
     else if (type == "ushort")
     {
         ushort value = 0;
         ushort.TryParse(data, out value);
         ValueParse.WriteValue(buffer, value, ValueParse.UShortParse);
     }
     else if (type == "uint")
     {
         uint value = 0;
         uint.TryParse(data, out value);
         ValueParse.WriteValue(buffer, value, ValueParse.UIntParse);
     }
     else if (type == "int")
     {
         int value = 0;
         int.TryParse(data, out value);
         ValueParse.WriteValue(buffer, value, ValueParse.IntParse);
     }
     else if (type == "ulong")
     {
         ulong value = 0;
         ulong.TryParse(data, out value);
         ValueParse.WriteValue(buffer, value, ValueParse.ULongParse);
     }
     else if (type == "long")
     {
         long value = 0;
         long.TryParse(data, out value);
         ValueParse.WriteValue(buffer, value, ValueParse.LongParse);
     }
     else if (type == "float")
     {
         float value = 0;
         float.TryParse(data, out value);
         ValueParse.WriteValue(buffer, value, ValueParse.FloatParse);
     }
     else if (type == "double")
     {
         double value = 0;
         double.TryParse(data, out value);
         ValueParse.WriteValue(buffer, value, ValueParse.DoubleParse);
     }
     else if (type == "string")
     {
         ValueParse.WriteValue(buffer, data, ValueParse.StringParse);
     }
     else if (type == "vector2")
     {
         string[] arr   = data.Split('@');
         Vector2  value = new Vector2(float.Parse(arr[0]), float.Parse(arr[1]));
         ValueParse.WriteValue(buffer, value, ValueParse.Vector2Parse);
     }
     else if (type == "vector3")
     {
         string[] arr   = data.Split('@');
         Vector3  value = new Vector3(float.Parse(arr[0]), float.Parse(arr[1]), float.Parse(arr[2]));
         ValueParse.WriteValue(buffer, value, ValueParse.Vector3Parse);
     }
     else if (type == "vector4")
     {
         string[] arr   = data.Split('@');
         Vector4  value = new Vector4(float.Parse(arr[0]), float.Parse(arr[1]), float.Parse(arr[2]),
                                      float.Parse(arr[3]));
         ValueParse.WriteValue(buffer, value, ValueParse.Vector4Parse);
     }
     else if (type == "color32")
     {
         string[] arr   = data.Split('@');
         Color32  value = new Color32(byte.Parse(arr[0]), byte.Parse(arr[1]), byte.Parse(arr[2]),
                                      byte.Parse(arr[3]));
         ValueParse.WriteValue(buffer, value, ValueParse.Color32Parse);
     }
     else if (type == "color")
     {
         string[] arr   = data.Split('@');
         Color    value = new Color(float.Parse(arr[0]), float.Parse(arr[1]), float.Parse(arr[2]),
                                    float.Parse(arr[3]));
         ValueParse.WriteValue(buffer, value, ValueParse.ColorParse);
     }
     else if (type == "datetime")
     {
         DateTime value = new DateTime(long.Parse(data));
         ValueParse.WriteValue(buffer, value, ValueParse.DateTimeParse);
     }
     else if (type == "rect")
     {
         string[] arr   = data.Split('@');
         Rect     value = new Rect(float.Parse(arr[0]), float.Parse(arr[1]), float.Parse(arr[2]),
                                   float.Parse(arr[3]));
         ValueParse.WriteValue(buffer, value, ValueParse.RectParse);
     }
     else if (type == "quaternion")
     {
         string[]   arr   = data.Split('@');
         Quaternion value = new Quaternion(float.Parse(arr[0]), float.Parse(arr[1]), float.Parse(arr[2]),
                                           float.Parse(arr[3]));
         ValueParse.WriteValue(buffer, value, ValueParse.QuaternionParse);
     }
     else if (type.StartsWith("list"))
     {
         string   listType = type.Split('|')[1];
         string[] datas    = data.Split('|');
         if (datas.Length > 0)
         {
             ValueParse.WriteValue(buffer, (ushort)datas.Length, ValueParse.UShortParse);
             for (int i = 0; i < datas.Length; i++)
             {
                 AddParseValue(buffer, listType, datas[i]);
             }
         }
         else
         {
             ValueParse.WriteValue(buffer, (ushort)0, ValueParse.UShortParse);
         }
     }
     else if (type.StartsWith("dirc"))
     {
         string   ktype = type.Split('|')[1];
         string   vtype = type.Split('|')[2];
         string[] datas = data.Split('|');
         if (datas.Length > 0)
         {
             ValueParse.WriteValue(buffer, (ushort)datas.Length, ValueParse.UShortParse);
             foreach (string date in datas)
             {
                 var key   = date.Split(':')[0];
                 var value = date.Split(':')[1];
                 AddParseValue(buffer, ktype, key);
                 AddParseValue(buffer, vtype, value);
             }
         }
         else
         {
             ValueParse.WriteValue(buffer, (ushort)0, ValueParse.UShortParse);
         }
     }
 }