public override string FileName(Type type)
    {
        Type valueType = type.GetElementType();
        var  gen       = BinarySerializerCodeGenerator.GetGenerator(valueType);

        return("Arr_" + gen.FileName(valueType));
    }
    public static string configGeneratorMd5(Type type)
    {
        var    gen = BinarySerializerCodeGenerator.GetGenerator(type);
        string serializerFileName = gen.SerializerFileName(type);
        Type   t = Type.GetType(serializerFileName + ",Assembly-CSharp");

        if (t != null)
        {
            Type typesMd5Type = Type.GetType("TypesMd5,Assembly-CSharp");
            if (typesMd5Type == null)
            {
                UnityEngine.Debug.LogError("Generate serializer code first");
            }
            var    fieldInfo = typesMd5Type.GetField("typeMd5");
            var    typeMd5   = fieldInfo.GetValue(null) as Dictionary <Type, string>;
            string md5       = typeMd5[t];
            foreach (var dtype in gen.DirectlyUsedTypesExcludeSelf(type))
            {
                md5 += configGeneratorMd5(dtype);
            }
            return(md5);
        }
        else
        {
            return("");
        }
    }
예제 #3
0
    public override string TypeName(Type type)
    {
        var valueType = type.GetGenericArguments()[0];
        var gen       = BinarySerializerCodeGenerator.GetGenerator(valueType);

        return(string.Format("{0}<{1}>", TypeUtility.GetGenericTypeName(type), gen.TypeName(valueType)));
    }
예제 #4
0
    public override string FileName(Type type)
    {
        var valueType = type.GetGenericArguments()[0];
        var gen       = BinarySerializerCodeGenerator.GetGenerator(valueType);

        return(TypeUtility.GetGenericTypeName(type) + "_" + gen.FileName(valueType));
    }
    public override Type[] TypeNameReferencedTypes(Type type)
    {
        Type valueType = type.GetElementType();
        var  gen       = BinarySerializerCodeGenerator.GetGenerator(valueType);

        return(new[] { type }
               .Union(gen.TypeNameReferencedTypes(valueType))
               .ToArray());
    }
    public override string TypeName(Type type)
    {
        var args      = type.GetGenericArguments();
        var keyType   = args[0];
        var valueType = args[1];
        var keyGen    = BinarySerializerCodeGenerator.GetGenerator(keyType);
        var valueGen  = BinarySerializerCodeGenerator.GetGenerator(valueType);

        return(string.Format("{0}<{1}, {2}>", TypeUtility.GetGenericTypeName(type), keyGen.TypeName(keyType), valueGen.TypeName(valueType)));
    }
    public override string GenerateSerializerCode(Type type)
    {
        var valueType = type.GetElementType();
        var gen       = BinarySerializerCodeGenerator.GetGenerator(valueType);

        string read  = GenArrayReadCode(valueType, gen);
        string write = GenArrayWriteCode(valueType, gen);

        return(GenSerializerClassCodeByTemplate(type, TypeNameReferencedTypes(type), "null", read, write));
    }
    private string GenFieldWriteCode(List <FieldInfo> fields)
    {
        StringBuilder code = new StringBuilder(InitStringBuilderCapacity);

        foreach (var field in fields)
        {
            string value = "d." + field.Name;
            var    gen   = BinarySerializerCodeGenerator.GetGenerator(field.FieldType);
            code.Append(string.Format("			{0};\n", gen.WriteExpression(field.FieldType, value)));
        }
        return(code.ToString());
    }
    private string GenFieldReadCode(Type type, List <FieldInfo> fields)
    {
        StringBuilder code = new StringBuilder(InitStringBuilderCapacity);

        foreach (var field in fields)
        {
            string value = string.Format("{0}.{1}", TypeName(type), field.Name);
            var    gen   = BinarySerializerCodeGenerator.GetGenerator(field.FieldType);
            code.Append(string.Format("		{0};\n", gen.ReadExpression(field.FieldType, value)));
        }
        return(code.ToString());
    }
    public override string GenerateSerializerCode(Type type)
    {
        var args      = type.GetGenericArguments();
        var keyType   = args[0];
        var valueType = args[1];
        var keyGen    = BinarySerializerCodeGenerator.GetGenerator(keyType);
        var valueGen  = BinarySerializerCodeGenerator.GetGenerator(valueType);

        string read  = GenListReadCode(type, keyType, valueType, keyGen, valueGen);
        string write = GenListWriteCode(type, keyType, valueType, keyGen, valueGen);

        return(GenSerializerClassCodeByTemplate(type, TypeNameReferencedTypes(type), "null", read, write));
    }
    public override Type[] TypeNameReferencedTypes(Type type)
    {
        var args      = type.GetGenericArguments();
        var keyType   = args[0];
        var valueType = args[1];
        var keyGen    = BinarySerializerCodeGenerator.GetGenerator(keyType);
        var valueGen  = BinarySerializerCodeGenerator.GetGenerator(valueType);

        return(new[] { type }
               .Union(keyGen.TypeNameReferencedTypes(keyType))
               .Union(valueGen.TypeNameReferencedTypes(valueType))
               .ToArray());
    }
예제 #12
0
    public static void ReadConfigAsBin(Type type, string name)
    {
        var    gen = BinarySerializerCodeGenerator.GetGenerator(type);
        string serializerFileName = gen.SerializerFileName(type);

        if (!serializerFileName.StartsWith("Static_"))
        {
            UnityEngine.Debug.LogError("Config type must be static");
            return;
        }

        Type serializer = Type.GetType(serializerFileName + ",Assembly-CSharp");

        if (serializer != null)
        {
            MethodInfo read = serializer.GetMethod("Read", BindingFlags.Public | BindingFlags.Static);
            if (read != null)
            {
                string       path = Path.Combine(FileUtils.binary_config_folder, name + ".conf");
                BinaryReader br   = new BinaryReader(File.Open(path, FileMode.Open));
                byte[]       md5  = br.ReadBytes(16);
                var          same = Md5Utility.Md5Compare(md5, Md5Utility.MD5(configGeneratorMd5(type)));
                if (!same)
                {
                    br.Close();
                    UnityEngine.Debug.LogError("Read binary config error: md5 not the same");
                    return;
                }
                read.Invoke(null, new object[] { br });
                br.Close();
            }
            else
            {
                UnityEngine.Debug.LogError("Generate serializer code first");
            }
        }
        else
        {
            UnityEngine.Debug.LogError("Generate serializer code first");
        }
    }
예제 #13
0
    public static void WriteConfigAsBin(Type type, string name, string folder)
    {
        var    gen = BinarySerializerCodeGenerator.GetGenerator(type);
        string serializerFileName = gen.SerializerFileName(type);

        if (!serializerFileName.StartsWith("Static_"))
        {
            UnityEngine.Debug.LogError("Config type must be static");
            return;
        }

        byte[] md5 = Md5Utility.MD5(ConfigReader.configGeneratorMd5(type));

        Type serializer = Type.GetType(serializerFileName + ",Assembly-CSharp");

        if (serializer != null)
        {
            MethodInfo write = serializer.GetMethod("Write", BindingFlags.Public | BindingFlags.Static);
            if (write != null)
            {
                string       path = Path.Combine(folder, name + ".conf");
                BinaryWriter bw   = new BinaryWriter(File.Open(path, FileMode.Create));
                bw.Write(md5);
                write.Invoke(null, new object[] { bw });
                bw.Close();
            }
            else
            {
                UnityEngine.Debug.LogError("Generate serializer code first");
            }
        }
        else
        {
            UnityEngine.Debug.LogError("Generate serializer code first");
        }
    }