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(""); } }
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))); }
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()); }
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"); } }
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"); } }