private void GenMessageWrap(MessageDef messageDef, TextWriter sw)
{
if (messageDef.m_EnumTypes.Count > 0 || messageDef.m_Messages.Count > 0) {
Console.WriteLine("[*** Warning ***] message {0} have inner enum or message, only simple message can wrap !!!", messageDef.m_TypeName);
}
try {
sw.WriteLine();
sw.WriteLine("namespace GameFramework");
sw.WriteLine("{");
sw.WriteLine("\tpublic sealed partial class {0}", messageDef.m_WrapName);
sw.WriteLine("\t{");
sw.WriteLine();
sw.WriteLine("\t\tpublic bool Modified");
sw.WriteLine("\t\t{");
sw.WriteLine("\t\t\tget{ return m_Modified;}");
sw.WriteLine("\t\t\tset{ m_Modified = value;}");
sw.WriteLine("\t\t}");
sw.WriteLine("\t\tpublic bool Deleted");
sw.WriteLine("\t\t{");
sw.WriteLine("\t\t\tget{ return m_Deleted;}");
sw.WriteLine("\t\t\tset{ m_Deleted = value;}");
sw.WriteLine("\t\t}");
sw.WriteLine();
sw.WriteLine("\t\tpublic List<string> PrimaryKeys");
sw.WriteLine("\t\t{");
sw.WriteLine("\t\t\tget{ return m_PrimaryKeys;}");
sw.WriteLine("\t\t}");
sw.WriteLine("\t\tpublic List<string> ForeignKeys");
sw.WriteLine("\t\t{");
sw.WriteLine("\t\t\tget{ return m_ForeignKeys;}");
sw.WriteLine("\t\t}");
sw.WriteLine();
foreach (MemberDef memberDef in messageDef.m_Members) {
if (null != FindMessageDef(memberDef.m_TypeName)) {
Console.WriteLine("[*** Warning ***] message {0} use other message, only simple message can wrap !!!", messageDef.m_TypeName);
}
string callOnUpdated = "OnFieldUpdated()";
bool isSpecial = false;
TypeConverterDef converter;
if (m_TypeConverters.TryGetValue(memberDef.m_TypeName, out converter)) {
if (memberDef.m_IsPrimaryKey || memberDef.m_IsForeignKey) {
callOnUpdated = string.Format("On{0}Updated()", memberDef.m_MemberName);
}
isSpecial = converter.m_IsSpecial;
if (isSpecial) {
sw.WriteLine(IndentCode("\t\t", converter.m_CrudCode), memberDef.m_MemberName, callOnUpdated);
} else {
sw.WriteLine("\t\tpublic {0} {1}", memberDef.m_TypeName, memberDef.m_MemberName);
sw.WriteLine("\t\t{");
sw.WriteLine("\t\t\tget{{return m_{0};}}", memberDef.m_MemberName);
sw.WriteLine("\t\t\tset");
sw.WriteLine("\t\t\t{");
sw.WriteLine("\t\t\t\tm_{0} = value;", memberDef.m_MemberName);
sw.WriteLine("\t\t\t\t{0};", callOnUpdated);
sw.WriteLine("\t\t\t}");
sw.WriteLine("\t\t}");
}
} else {
sw.WriteLine("\t\tpublic {0} {1}", memberDef.m_TypeName, memberDef.m_MemberName);
sw.WriteLine("\t\t{");
sw.WriteLine("\t\t\tget{{return m_{0}.{1};}}", messageDef.m_TypeName, memberDef.m_MemberName);
sw.WriteLine("\t\t\tset");
sw.WriteLine("\t\t\t{");
sw.WriteLine("\t\t\t\tm_{0}.{1} = value;", messageDef.m_TypeName, memberDef.m_MemberName);
if (!(memberDef.m_IsPrimaryKey || memberDef.m_IsForeignKey)) {
sw.WriteLine("\t\t\t\t{0};", callOnUpdated);
} else {
if (memberDef.m_IsPrimaryKey) {
sw.WriteLine("\t\t\t\t{0};", "OnPrimaryKeyUpdated()");
}
if (memberDef.m_IsForeignKey) {
sw.WriteLine("\t\t\t\t{0};", "OnForeignKeyUpdated()");
}
}
sw.WriteLine("\t\t\t}");
sw.WriteLine("\t\t}");
}
}
sw.WriteLine();
sw.WriteLine("\t\tpublic {0} ToProto()", messageDef.m_TypeName);
sw.WriteLine("\t\t{");
foreach (MemberDef memberDef in messageDef.m_Members) {
TypeConverterDef converter;
if (m_TypeConverters.TryGetValue(memberDef.m_TypeName, out converter)) {
sw.WriteLine(IndentCode("\t\t\t", converter.m_Logic2MessageCode), messageDef.m_TypeName, memberDef.m_MemberName);
}
}
sw.WriteLine("\t\t\treturn m_{0};", messageDef.m_TypeName);
sw.WriteLine("\t\t}");
sw.WriteLine("\t\tpublic void FromProto({0} proto)", messageDef.m_TypeName);
sw.WriteLine("\t\t{");
sw.WriteLine("\t\t\tm_{0} = proto;", messageDef.m_TypeName);
sw.WriteLine("\t\t\tUpdatePrimaryKeys();");
sw.WriteLine("\t\t\tUpdateForeignKeys();");
foreach (MemberDef memberDef in messageDef.m_Members) {
TypeConverterDef converter;
if (m_TypeConverters.TryGetValue(memberDef.m_TypeName, out converter)) {
sw.WriteLine(IndentCode("\t\t\t", converter.m_Message2LogicCode), messageDef.m_TypeName, memberDef.m_MemberName);
}
}
sw.WriteLine("\t\t}");
foreach (MemberDef memberDef in messageDef.m_Members) {
TypeConverterDef converter;
if (m_TypeConverters.TryGetValue(memberDef.m_TypeName, out converter)) {
if (memberDef.m_IsPrimaryKey || memberDef.m_IsForeignKey) {
sw.WriteLine();
sw.WriteLine("\t\tprivate void On{0}Updated()", memberDef.m_MemberName);
sw.WriteLine("\t\t{");
sw.WriteLine("\t\t\tm_Modified = true;");
if (memberDef.m_IsPrimaryKey) {
sw.WriteLine(IndentCode("\t\t\t", converter.m_Logic2MessageCode), messageDef.m_TypeName, memberDef.m_MemberName);
sw.WriteLine("\t\t\tUpdatePrimaryKeys();");
} else if (memberDef.m_IsForeignKey) {
sw.WriteLine(IndentCode("\t\t\t", converter.m_Logic2MessageCode), messageDef.m_TypeName, memberDef.m_MemberName);
sw.WriteLine("\t\t\tUpdateForeignKeys();");
}
sw.WriteLine("\t\t}");
}
}
}
sw.WriteLine();
sw.WriteLine("\t\tprivate void OnFieldUpdated()");
sw.WriteLine("\t\t{");
sw.WriteLine("\t\t\tm_Modified = true;");
sw.WriteLine("\t\t}");
sw.WriteLine();
sw.WriteLine("\t\tprivate void OnPrimaryKeyUpdated()");
sw.WriteLine("\t\t{");
sw.WriteLine("\t\t\tm_Modified = true;");
sw.WriteLine("\t\t\tUpdatePrimaryKeys();");
sw.WriteLine("\t\t}");
sw.WriteLine();
sw.WriteLine("\t\tprivate void OnForeignKeyUpdated()");
sw.WriteLine("\t\t{");
sw.WriteLine("\t\t\tm_Modified = true;");
sw.WriteLine("\t\t\tUpdateForeignKeys();");
sw.WriteLine("\t\t}");
sw.WriteLine();
sw.WriteLine("\t\tprivate void UpdatePrimaryKeys()");
sw.WriteLine("\t\t{");
if (messageDef.m_PrimaryKeys.Count > 0) {
sw.WriteLine("\t\t\tm_PrimaryKeys.Clear();");
foreach (string key in messageDef.m_PrimaryKeys) {
MemberDef memberDef = messageDef.GetMemberDef(key);
if (memberDef.m_TypeName.Equals("string")) {
sw.WriteLine("\t\t\tif (m_{0}.{1} != null) {2}", messageDef.m_TypeName, key, '{');
sw.WriteLine("\t\t\t\tm_PrimaryKeys.Add(m_{0}.{1}.ToString());", messageDef.m_TypeName, key);
sw.WriteLine("\t\t\t}");
} else {
sw.WriteLine("\t\t\tm_PrimaryKeys.Add(m_{0}.{1}.ToString());", messageDef.m_TypeName, key);
}
}
}
sw.WriteLine("\t\t}");
sw.WriteLine();
sw.WriteLine("\t\tprivate void UpdateForeignKeys()");
sw.WriteLine("\t\t{");
if (messageDef.m_ForeignKeys.Count > 0) {
sw.WriteLine("\t\t\tm_ForeignKeys.Clear();");
foreach (string key in messageDef.m_ForeignKeys) {
MemberDef memberDef = messageDef.GetMemberDef(key);
if (memberDef.m_TypeName.Equals("string")) {
sw.WriteLine("\t\t\tif (m_{0}.{1} != null) {2}", messageDef.m_TypeName, key, '{');
sw.WriteLine("\t\t\t\tm_ForeignKeys.Add(m_{0}.{1}.ToString());", messageDef.m_TypeName, key);
sw.WriteLine("\t\t\t}");
} else {
sw.WriteLine("\t\t\tm_ForeignKeys.Add(m_{0}.{1}.ToString());", messageDef.m_TypeName, key);
}
}
}
sw.WriteLine("\t\t}");
sw.WriteLine();
sw.WriteLine("\t\tprivate bool m_Modified = false;");
sw.WriteLine("\t\tprivate bool m_Deleted = false;");
sw.WriteLine("\t\tprivate List<string> m_PrimaryKeys = new List<string>();");
sw.WriteLine("\t\tprivate List<string> m_ForeignKeys = new List<string>();");
sw.WriteLine("\t\tprivate {0} m_{1} = new {2}();", messageDef.m_TypeName, messageDef.m_TypeName, messageDef.m_TypeName);
foreach (MemberDef memberDef in messageDef.m_Members) {
TypeConverterDef converter;
if (m_TypeConverters.TryGetValue(memberDef.m_TypeName, out converter)) {
sw.WriteLine("\t\tprivate {0} m_{1} = new {0}();", memberDef.m_TypeName, memberDef.m_MemberName);
}
}
sw.WriteLine();
sw.WriteLine("\t}");
sw.WriteLine("}");
} catch (Exception ex) {
Console.WriteLine(ex);
}
}