LogicDataGenerator.MessageDslParser.ParseMessage C# (CSharp) Method

ParseMessage() private static method

private static ParseMessage ( string dslFile, Dsl.FunctionData funcData, string defGroupName, bool isInnerMessage, MessageDef>.SortedDictionary messages, bool &haveError ) : string
dslFile string
funcData Dsl.FunctionData
defGroupName string
isInnerMessage bool
messages MessageDef>.SortedDictionary
haveError bool
return string
        private static string ParseMessage(string dslFile, FunctionData funcData, string defGroupName, bool isInnerMessage, SortedDictionary<string, MessageDef> messages, ref bool haveError)
        {
            string typeName = null;
              if (null != funcData) {
            CallData callData = funcData.Call;
            if (null != callData && callData.GetParamNum() >= 1) {
              string groupName;
              typeName = callData.GetParamId(0);
              if (callData.GetParamNum() > 1) {
            groupName = callData.GetParamId(1);
              } else {
            groupName = defGroupName;
              }

              MessageDef messageDef = new MessageDef();
              messageDef.m_TypeName = typeName;
              messageDef.m_WrapName = typeName + "Wrap";
              messageDef.m_GroupName = groupName;
              messageDef.m_DontGenEnum = isInnerMessage;
              messageDef.m_DontGenDB = isInnerMessage;
              if (messages.ContainsKey(typeName)) {
            messages[typeName] = messageDef;
              } else {
            messages.Add(typeName, messageDef);
              }

              int nextOrder = 1;
              foreach (ISyntaxComponent comp in funcData.Statements) {
            CallData field = comp as CallData;
            if (null != field) {
              if (field.GetId() == "option") {
                if (field.GetParamId(0) == "dontgenenum")
                  messageDef.m_DontGenEnum = true;
                else if (field.GetParamId(0) == "dontgendb")
                  messageDef.m_DontGenDB = true;
              } else if (field.GetId() == "enumvalue") {
                messageDef.m_EnumValue = field.GetParamId(0);
              } else if (field.GetId() == "wrapname") {
                messageDef.m_WrapName = field.GetParamId(0);
              } else if (field.GetId() == "member") {
                if (field.GetParamNum() >= 3) {
                  MemberDef memberDef = new MemberDef();
                  memberDef.m_MemberName = field.GetParamId(0);
                  memberDef.m_TypeName = field.GetParamId(1);
                  memberDef.m_Modifier = field.GetParamId(2);
                  memberDef.m_Order = nextOrder++;
                  messageDef.m_Members.Add(memberDef);
                  messageDef.m_ColumnNames.Add(memberDef.m_MemberName);
                } else {
                  LogSystem.Error("member {0} must have name、type and modifier ! line {1} file {2}", comp.ToScriptString(), comp.GetLine(), dslFile);
                  haveError = true;
                }
              }
            } else {
              FunctionData customCode = comp as FunctionData;
              if (null != customCode) {
                if (customCode.GetId() == "enum") {
                  ParseEnum(dslFile, customCode, messageDef.m_GroupName, messageDef.m_EnumTypes, ref haveError);
                } if (customCode.GetId() == "message") {
                  ParseMessage(dslFile, customCode, messageDef.m_GroupName, true, messageDef.m_Messages, ref haveError);
                } if (customCode.GetId() == "member") {
                  CallData customField = customCode.Call;
                  if (null != customField && customField.GetParamNum() >= 3) {
                    MemberDef memberDef = new MemberDef();
                    memberDef.m_MemberName = customField.GetParamId(0);
                    memberDef.m_TypeName = customField.GetParamId(1);
                    memberDef.m_Modifier = customField.GetParamId(2);
                    memberDef.m_Order = nextOrder++;
                    messageDef.m_Members.Add(memberDef);
                    messageDef.m_ColumnNames.Add(memberDef.m_MemberName);

                    foreach (ISyntaxComponent comp2 in customCode.Statements) {
                      ValueData val = comp2 as ValueData;
                      if (null != val) {
                        if (val.GetId() == "primarykey") {
                          memberDef.m_IsPrimaryKey = true;
                          messageDef.m_PrimaryKeys.Add(memberDef.m_MemberName);
                        } else if (val.GetId() == "foreignkey") {
                          memberDef.m_IsForeignKey = true;
                          messageDef.m_ForeignKeys.Add(memberDef.m_MemberName);
                        }
                      } else {
                        CallData item = comp2 as CallData;
                        if (null != item) {
                          if (item.GetId() == "default") {
                            memberDef.m_Default = item.GetParamId(0);
                          } else if (item.GetId() == "maxsize") {
                            memberDef.m_MaxSize = int.Parse(item.GetParamId(0));
                          } else if (item.GetId() == "primarykey") {
                            memberDef.m_IsPrimaryKey = true;
                            messageDef.m_PrimaryKeys.Add(memberDef.m_MemberName);
                          } else if (item.GetId() == "foreignkey") {
                            memberDef.m_IsForeignKey = true;
                            messageDef.m_ForeignKeys.Add(memberDef.m_MemberName);
                          }
                        } else {
                          LogSystem.Error("message member options {0} must end with ';' ! line {1} file {2}", comp2.ToScriptString(), comp2.GetLine(), dslFile);
                          haveError = true;
                        }
                      }
                    }
                  }
                }
              } else {
                LogSystem.Error("message member {0} must have params and end with ';' ! line {1} file {2}", comp.ToScriptString(), comp.GetLine(), dslFile);
                haveError = true;
              }
            }
              }
            } else {
              LogSystem.Error("message {0} must have 1 or 2 params (name and group) ! line {1} file {2}", funcData.ToScriptString(), funcData.GetLine(), dslFile);
              haveError = true;
            }
              }
              return typeName;
        }