LogicDataGenerator.MessageDslParser.GenMessageWrap C# (CSharp) Method

GenMessageWrap() private method

private GenMessageWrap ( MessageDef messageDef, TextWriter sw ) : void
messageDef MessageDef
sw System.IO.TextWriter
return void
        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);
              }
        }