Ejemplo n.º 1
0
        private static void test_xbuffer(A data)
        {
            var steam = new XSteam(1, 1024 * 1024 * 100);

            // 序列化
            uint offset = 0;

            Timer.beginTime();
            ABuffer.serialize(data, steam);
            Timer.endTime("xbuffer 普通模式序列化");

            var buffer = steam.getBytes();

            // 反序列化
            offset = 0;
            Timer.beginTime();
            ABuffer.deserialize(buffer, ref offset);
            Timer.endTime("xbuffer 普通模式反序列化");

            // 泛型模式序列化
            Timer.beginTime();
            Serializer.cachedSteam = steam;
            Serializer.serialize(data);
            Timer.endTime("xbuffer 泛型模式序列化");

            buffer = steam.getBytes();
            // 泛型模式反序列化
            Timer.beginTime();
            Serializer.deserialize <A>(buffer);
            Timer.endTime("xbuffer 泛型模式反序列化");

            // 内存占用
            Console.WriteLine(string.Format(" xbuffer 普通模式总占用内存 {0} byte.", buffer.Length));
        }
Ejemplo n.º 2
0
        public static void serialize(AchievementCondition value, XSteam steam)
        {
            // null
            boolBuffer.serialize(value == null, steam);
            if (value == null)
            {
                return;
            }

            // type

            intBuffer.serialize(value.type, steam);



            // count

            intBuffer.serialize(value.count, steam);



            // param

            intBuffer.serialize(value.param, steam);



            // compareType

            intBuffer.serialize(value.compareType, steam);
        }
        /// <summary>
        /// 序列化数组类型数据
        /// </summary>
        /// <param name="data">数据</param>
        /// <param name="spilter">分隔符</param>
        /// <param name="stream">Xbuffer的内存管理分配对象</param>
        private void serializArrayData <T>(string data, string spilter, XSteam stream)
        {
            if (string.IsNullOrEmpty(data))
            {
                // 未配置一维数据,默认值去对应T类型的默认值
                // 长度默认为1
                serializNoneArrayData <intBuffer>("1", stream);
                var defaultvalue = getBufferCorrespondingDV <T>();
                serializNoneArrayData <T>(defaultvalue, stream);
            }
            else
            {
                // 只支持1维数据的配置和快速解析
                var spliters = spilter.ToCharArray();
                var datas    = data.Split(spliters[0]);
                // 写入一维数组的长度字节数信息
                serializNoneArrayData <intBuffer>(datas.Length.ToString(), stream);

                // 开始序列化一维数组数据
                foreach (var dt in datas)
                {
                    serializNoneArrayData <T>(dt, stream);
                }
            }
        }
        public static void serialize(TargetSystem value, XSteam steam)
        {
            // null
            boolBuffer.serialize(value == null, steam);
            if (value == null)
            {
                return;
            }

            // systemType

            intBuffer.serialize(value.systemType, steam);



            // param1

            intBuffer.serialize(value.param1, steam);



            // param2

            intBuffer.serialize(value.param2, steam);



            // param3

            intBuffer.serialize(value.param3, steam);
        }
Ejemplo n.º 5
0
        public static void serialize(t_author_Info value, XSteam steam)
        {
            // null
            boolBuffer.serialize(value == null, steam);
            if (value == null)
            {
                return;
            }

            // id

            intBuffer.serialize(value.id, steam);
            // author

            stringBuffer.serialize(value.author, steam);
            // age

            intBuffer.serialize(value.age, steam);
            // sex

            stringBuffer.serialize(value.sex, steam);
            // national

            stringBuffer.serialize(value.national, steam);
        }
Ejemplo n.º 6
0
 public static void serialize(AchievementConfigs value, XSteam steam)
 {
     intBuffer.serialize(value.ConfigList.Length, steam);
     for (int i = 0; i < value.ConfigList.Length; i++)
     {
         AchievementConfigBuffer.serialize(value.ConfigList[i], steam);
     }
 }
Ejemplo n.º 7
0
 public unsafe static void serialize(bool value, XSteam steam)
 {
     steam.applySize(size);
     fixed(byte *ptr = steam.contents[steam.index_group])
     {
         *(bool *)(ptr + steam.index_cell) = value;
         steam.index_cell += size;
     }
 }
        public static void serialize(Config value, XSteam steam)
        {
            // null
            boolBuffer.serialize(value == null, steam);
            if (value == null)
            {
                return;
            }

            // AchievementConfig

            AchievementConfigsBuffer.serialize(value.AchievementConfig, steam);
        }
 /// <summary>
 /// 序列化一行Excel数据信息
 /// </summary>
 /// <param name="exceldata"></param>
 private void serializeExcelOneLineDatas(ExcelData[] exceldata, XSteam stream)
 {
     // 先写入数据是否为空的bool信息
     serializeExcelData("bool", exceldata == null ? "true" : "false", string.Empty, stream);
     if (exceldata != null)
     {
         // 数据不为空才写入数据信息
         foreach (var data in exceldata)
         {
             serializeExcelData(data.Type, data.Data, data.Spliter, stream);
         }
     }
 }
Ejemplo n.º 10
0
        public static void serialize(t_language value, XSteam steam)
        {
            // null
            boolBuffer.serialize(value == null, steam);
            if (value == null)
            {
                return;
            }

            // id

            intBuffer.serialize(value.id, steam);
            // content

            stringBuffer.serialize(value.content, steam);
        }
        public static void serialize(t_global_i value, XSteam steam)
        {
            // null
            boolBuffer.serialize(value == null, steam);
            if (value == null)
            {
                return;
            }

            // Key

            stringBuffer.serialize(value.Key, steam);
            // Value

            intBuffer.serialize(value.Value, steam);
        }
        public static void serialize(t_language value, XSteam steam)
        {
            // null
            boolBuffer.serialize(value == null, steam);
            if (value == null)
            {
                return;
            }

            // Id

            stringBuffer.serialize(value.Id, steam);
            // string_value

            stringBuffer.serialize(value.string_value, steam);
        }
Ejemplo n.º 13
0
        public static void serialize(t_language_cn value, XSteam steam)
        {
            // null
            boolBuffer.serialize(value == null, steam);
            if (value == null)
            {
                return;
            }

            // Key

            stringBuffer.serialize(value.Key, steam);
            // Value

            stringBuffer.serialize(value.Value, steam);
        }
        /// <summary>
        /// 将相关Excel数据写入到对应二进制文件
        /// </summary>
        /// <param name="excelinfo">excel数据信息</param>
        /// <returns></returns>
        public bool writeExcelDataToBytes(ExcelInfo excelinfo)
        {
            Console.WriteLine(string.Format("当前正在序列化表格 : {0}", excelinfo.ExcelName));
            // 因为考虑到Xbuffer的内存分配策略是递增的
            // 在不确Excel数据大小的情况下,默认分配不能过大,避免内存浪费
            var exceldatalist = excelinfo.DatasList;

            using (var output = File.Create(BytesFolderPath + excelinfo.ExcelName + ConstValue.ExcelBytesDataFilePostFix))
            {
                BinaryWriter bw = new BinaryWriter(output);
                // 写入表格数据行数字节信息
                var totallinenumber = exceldatalist.Count;
                bw.Write(totallinenumber);

                int currentlinenmber = 0;
                try
                {
                    //接下来的写入格式: 每一行数据字节数长度 + 数据字节
                    for (int i = 0, length = exceldatalist.Count; i < length; i++)
                    {
                        //这里分配足够小,确保不会因为数据写入没有导致内存分配扩张导致wast计算不正确
                        XSteam stream = new XSteam(1, 32);
                        serializeExcelOneLineDatas(exceldatalist[i], stream);
                        var bytes = stream.getBytes();
                        // 写入单行数据长度信息
                        bw.Write(bytes.Length);
                        // 写入单行表格数据字节信息
                        bw.Write(bytes);
                        currentlinenmber = i;
                    }
                }
                catch (System.Exception e)
                {
                    Console.WriteLine(string.Format("异常 : {0}", e.ToString()));
                    Console.WriteLine(string.Format("当前序列化的行号 : {0}", currentlinenmber));
                    return(false);
                }
                finally
                {
                    bw.Flush();
                    bw.Close();
                }
            }
            return(true);
        }
Ejemplo n.º 15
0
        public static void serialize(E value, XSteam steam)
        {
            // null
            boolBuffer.serialize(value == null, steam);
            if (value == null)
            {
                return;
            }

            // a
            boolBuffer.serialize(value.a, steam);
            // b
            intBuffer.serialize(value.b, steam);
            // c
            floatBuffer.serialize(value.c, steam);
            // d
            stringBuffer.serialize(value.d, steam);
        }
        public static void serialize(RewardItem value, XSteam steam)
        {
            // null
            boolBuffer.serialize(value == null, steam);
            if (value == null)
            {
                return;
            }

            // itemId

            intBuffer.serialize(value.itemId, steam);



            // itemCount

            intBuffer.serialize(value.itemCount, steam);
        }
Ejemplo n.º 17
0
        public static void serialize(IdPair value, XSteam steam)
        {
            // null
            boolBuffer.serialize(value == null, steam);
            if (value == null)
            {
                return;
            }

            // id

            intBuffer.serialize(value.id, steam);



            // value

            intBuffer.serialize(value.value, steam);
        }
Ejemplo n.º 18
0
        public static void serialize(A value, XSteam steam)
        {
            // null
            boolBuffer.serialize(value == null, steam);
            if (value == null)
            {
                return;
            }

            // a
            intBuffer.serialize(value.a.Length, steam);
            for (int i = 0; i < value.a.Length; i++)
            {
                boolBuffer.serialize(value.a[i], steam);
            }
            // b
            intBuffer.serialize(value.b.Length, steam);
            for (int i = 0; i < value.b.Length; i++)
            {
                intBuffer.serialize(value.b[i], steam);
            }
            // c
            intBuffer.serialize(value.c.Length, steam);
            for (int i = 0; i < value.c.Length; i++)
            {
                floatBuffer.serialize(value.c[i], steam);
            }
            // d
            intBuffer.serialize(value.d.Length, steam);
            for (int i = 0; i < value.d.Length; i++)
            {
                stringBuffer.serialize(value.d[i], steam);
            }
            // e
            intBuffer.serialize(value.e.Length, steam);
            for (int i = 0; i < value.e.Length; i++)
            {
                EBuffer.serialize(value.e[i], steam);
            }
        }
Ejemplo n.º 19
0
        public static void serialize(t_ui value, XSteam steam)
        {
            // null
            boolBuffer.serialize(value == null, steam);
            if (value == null)
            {
                return;
            }

            // WinName

            stringBuffer.serialize(value.WinName, steam);
            // ResPath

            stringBuffer.serialize(value.ResPath, steam);
            // IsFullScreen

            boolBuffer.serialize(value.IsFullScreen, steam);
            // Layer

            intBuffer.serialize(value.Layer, steam);
        }
        public static void serialize(t_Global3 value, XSteam steam)
        {
            // null
            boolBuffer.serialize(value == null, steam);
            if (value == null)
            {
                return;
            }

            // Id

            intBuffer.serialize(value.Id, steam);
            // stringvalue

            stringBuffer.serialize(value.stringvalue, steam);
            // intvalue

            intBuffer.serialize(value.intvalue, steam);
            // floatvalue

            floatBuffer.serialize(value.floatvalue, steam);
            // intarrayvalue


            intBuffer.serialize(value.intarrayvalue.Length, steam);
            for (int i = 0; i < value.intarrayvalue.Length; i++)
            {
                intBuffer.serialize(value.intarrayvalue[i], steam);
            }
            // stringarrayvalue


            intBuffer.serialize(value.stringarrayvalue.Length, steam);
            for (int i = 0; i < value.stringarrayvalue.Length; i++)
            {
                stringBuffer.serialize(value.stringarrayvalue[i], steam);
            }
        }
        public static void serialize(t_AuthorInfo10 value, XSteam steam)
        {
            // null
            boolBuffer.serialize(value == null, steam);
            if (value == null)
            {
                return;
            }

            // Id

            intBuffer.serialize(value.Id, steam);
            // author

            stringBuffer.serialize(value.author, steam);
            // age

            intBuffer.serialize(value.age, steam);
            // money

            floatBuffer.serialize(value.money, steam);
            // hashouse

            boolBuffer.serialize(value.hashouse, steam);
            // pbutctime

            longBuffer.serialize(value.pbutctime, steam);
            // luckynumber


            intBuffer.serialize(value.luckynumber.Length, steam);
            for (int i = 0; i < value.luckynumber.Length; i++)
            {
                intBuffer.serialize(value.luckynumber[i], steam);
            }
        }
Ejemplo n.º 22
0
 public unsafe static void serialize(byte value, XSteam steam)
 {
     steam.applySize(size);
     steam.contents[steam.index_group][steam.index_cell] = value;
     steam.index_cell += size;
 }
Ejemplo n.º 23
0
        public static void serialize(AchievementConfig value, XSteam steam)
        {
            // null
            boolBuffer.serialize(value == null, steam);
            if (value == null)
            {
                return;
            }

            // Id

            intBuffer.serialize(value.Id, steam);



            // Name

            intBuffer.serialize(value.Name, steam);



            // Desc

            intBuffer.serialize(value.Desc, steam);



            // Icon

            intBuffer.serialize(value.Icon, steam);



            // Difficulty

            intBuffer.serialize(value.Difficulty, steam);



            // Condition

            AchievementConditionBuffer.serialize(value.Condition, steam);



            // RewardItem


            intBuffer.serialize(value.RewardItem.Length, steam);
            for (int i = 0; i < value.RewardItem.Length; i++)
            {
                RewardItemBuffer.serialize(value.RewardItem[i], steam);
            }


            // Buff

            IdPairBuffer.serialize(value.Buff, steam);



            // NeedAchievement

            intBuffer.serialize(value.NeedAchievement, steam);



            // TargetSystem

            TargetSystemBuffer.serialize(value.TargetSystem, steam);



            // Group

            intBuffer.serialize(value.Group, steam);
        }
        /// <summary>
        /// 序列化非数组类型数据
        /// </summary>
        /// <param name="data">数据</param>
        /// <param name="stream">Xbuffer的内存管理分配对象</param>
        private void serializNoneArrayData <T>(string data, XSteam stream)
        {
            var type           = typeof(T);
            var typeinstance   = Activator.CreateInstance <T>();
            var serilizemethod = type.GetMethod("serialize");

            if (serilizemethod != null)
            {
                // 填写数据之前需要解析数据到对应的类型
                // 支持不填数据采用默认数值的形式
                object finaldata = null;
                if (type == typeof(intBuffer))
                {
                    if (string.IsNullOrEmpty(data))
                    {
                        finaldata = default(int);
                    }
                    else
                    {
                        finaldata = int.Parse(data);
                    }
                }
                else if (type == typeof(floatBuffer))
                {
                    if (string.IsNullOrEmpty(data))
                    {
                        finaldata = default(int);
                    }
                    else
                    {
                        finaldata = float.Parse(data);
                    }
                }
                else if (type == typeof(stringBuffer))
                {
                    if (string.IsNullOrEmpty(data))
                    {
                        finaldata = string.Empty;
                    }
                    else
                    {
                        finaldata = data;
                    }
                }
                else if (type == typeof(longBuffer))
                {
                    if (string.IsNullOrEmpty(data))
                    {
                        finaldata = default(long);
                    }
                    else
                    {
                        finaldata = long.Parse(data);
                    }
                }
                else if (type == typeof(boolBuffer))
                {
                    if (string.IsNullOrEmpty(data))
                    {
                        finaldata = default(bool);
                    }
                    else
                    {
                        finaldata = bool.Parse(data);
                    }
                }
                serilizemethod.Invoke(typeinstance, new object[] { finaldata, stream });
            }
            else
            {
                Console.WriteLine(string.Format("没有找到类型T : {0}的serialize方法!", type.ToString()));
            }
        }
        /// <summary>
        /// 序列化excel特定数据
        /// </summary>
        /// <param name="datatype">数据类型字符串</param>
        /// <param name="data">数据</param>
        /// <param name="spilter">数据分隔符</param>
        /// <param name="stream">Xbuffer的内存管理分配对象</param>
        private bool serializeExcelData(string datatype, string data, string spilter, XSteam stream)
        {
            switch (datatype)
            {
            case "notation":
                //注释类型只用于表格查看,不作为实际的数据
                //不需要进行序列化
                break;

            case "int":
                serializNoneArrayData <intBuffer>(data, stream);
                break;

            case "float":
                serializNoneArrayData <floatBuffer>(data, stream);
                break;

            case "string":
                serializNoneArrayData <stringBuffer>(data, stream);
                break;

            case "long":
                serializNoneArrayData <longBuffer>(data, stream);
                break;

            case "bool":
                serializNoneArrayData <boolBuffer>(data, stream);
                break;

            case "int[]":
                serializArrayData <intBuffer>(data, spilter, stream);
                break;

            case "float[]":
                serializArrayData <floatBuffer>(data, spilter, stream);
                break;

            case "string[]":
                serializArrayData <stringBuffer>(data, spilter, stream);
                break;

            case "long[]":
                serializArrayData <longBuffer>(data, spilter, stream);
                break;

            case "bool[]":
                serializArrayData <boolBuffer>(data, spilter, stream);
                break;

            default:
                Console.WriteLine(string.Format("严重错误! 不支持的序列化数据类型 : {0}", datatype));
                return(false);
            }
            return(true);
        }