コード例 #1
0
 /// <summary>
 /// If <paramref name="field"/> is a group-counter for <paramref name="msgType"/>, check that it is accurate, else do nothing.
 /// </summary>
 /// <param name="field">a group's counter field</param>
 /// <param name="map">the FieldMap that contains the group being checked</param>
 /// <param name="msgType">msg type of message that is/contains <paramref name="map"/></param>
 public void CheckGroupCount(Fields.IField field, FieldMap map, string msgType)
 {
     if (IsGroup(msgType, field.Tag) && map.GetInt(field.Tag) != map.GroupCount(field.Tag))
     {
         throw new RepeatingGroupCountMismatch(field.Tag);
     }
 }
コード例 #2
0
        private void ProcessFieldMapToJSON(string sNode, StringBuilder sb, FieldMap fieldMap, string origChkSum = null)
        {
            Type fieldType;

            sb.Append($@"""{sNode}"":");

            foreach (var field in fieldMap)
            {
                if (dataDictionary.TryGetFieldType(field.Key, out fieldType))
                {
                    FIXDictionary.DDField ddField = dataDictionary.FieldsByTag[field.Key];
                    child = new XElement(ddField.Name);
                    child.Add(new XAttribute("Tag", field.Key));
                    child.Add(new XAttribute("Value", field.Value));
                    if (ddField.HasEnums())
                    {
                        child.Add(new XAttribute("HasEnums", true));
                        string enumTranslation = ddField.EnumDict.FirstOrDefault(t => t.Key == field.Value.ToString()).Value;
                        if (!string.IsNullOrEmpty(enumTranslation))
                        {
                            child.Add(new XAttribute("EnumTranslation", enumTranslation));
                        }
                    }

                    if (field.Key == Tags.CheckSum && origChkSum != null)
                    {
                        child.Add(new XAttribute("OrigChks", origChkSum));
                    }

                    int groupCount = fieldMap.GroupCount(field.Key);

                    if (groupCount > 0)
                    {
                        child.Add(new XAttribute("IsGroup", "Y"));
                        child.Add(new XAttribute("GroupsCount", groupCount));

                        for (int i = 1; i <= groupCount; i++)
                        {
                            Group currGroup = fieldMap.GetGroup(i, field.Key);
                            ProcessFieldMapToXML(child, currGroup);
                        }
                    }
                }
                else
                {
                    child = new XElement("UserDefined_" + field.Key.ToString());
                    child.Add(new XAttribute("Tag", field.Key));
                    child.Add(new XAttribute("Value", field.Value));
                }
                parent.Add(child);
            }
            sb.Append("}");
        }
コード例 #3
0
        public void Iterate(FieldMap map, string msgType)
        {
            DataDictionary.CheckHasNoRepeatedTags(map);

            // check non-group fields
            int lastField = 0;

            foreach (KeyValuePair <int, Fields.IField> kvp in map)
            {
                Fields.IField field = kvp.Value;
                if (lastField != 0 && field.Tag == lastField)
                {
                    throw new RepeatedTag(lastField);
                }
                CheckHasValue(field);

                if (!string.IsNullOrEmpty(this.Version))
                {
                    CheckValidFormat(field);

                    if (ShouldCheckTag(field))
                    {
                        CheckValidTagNumber(field.Tag);
                        CheckValue(field);
                        if (!Message.IsHeaderField(field.Tag, this) && !Message.IsTrailerField(field.Tag, this))
                        {
                            CheckIsInMessage(field, msgType);
                            CheckGroupCount(field, map, msgType);
                        }
                    }
                }
                lastField = field.Tag;
            }

            // check contents of each group
            foreach (int groupTag in map.GetGroupTags())
            {
                if (!Message.IsHeaderField(groupTag, this) && !Message.IsTrailerField(groupTag, this))
                {
                    for (int i = 1; i <= map.GroupCount(groupTag); i++)
                    {
                        Group g   = map.GetGroup(i, groupTag);
                        DDGrp ddg = this.Messages[msgType].GetGroup(groupTag);
                        IterateGroup(g, ddg, msgType);
                    }
                }
            }
        }
コード例 #4
0
        public void Iterate(FieldMap map, string msgType)
        {
            DataDictionary.CheckHasNoRepeatedTags(map);

            // check non-group fields
            int lastField = 0;
            foreach (KeyValuePair<int, Fields.IField> kvp in map)
            {
                Fields.IField field = kvp.Value;
                if (lastField != 0 && field.Tag == lastField)
                    throw new RepeatedTag(lastField);
                CheckHasValue(field);

                if (null != this.Version && this.Version.Length > 0)
                {
                    CheckValidFormat(field);

                    if (ShouldCheckTag(field))
                    {
                        CheckValidTagNumber(field.Tag);
                        CheckValue(field);
                        if (!Message.IsHeaderField(field.Tag, this) && !Message.IsTrailerField(field.Tag, this))
                        {
                            CheckIsInMessage(field, msgType);
                            CheckGroupCount(field, map, msgType);
                        }
                    }
                }
                lastField = field.Tag;
            }

            // check contents of each group
            foreach (int groupTag in map.GetGroupTags())
            {
                for (int i = 1; i <= map.GroupCount(groupTag); i++)
                {
                    Group g = map.GetGroup(i, groupTag);
                    DDGrp ddg = this.Messages[msgType].GetGroup(groupTag);
                    IterateGroup(g, ddg, msgType);
                }
            }
        }
コード例 #5
0
 /// <summary>
 /// If <paramref name="field"/> is a group-counter for <paramref name="msgType"/>, check that it is accurate, else do nothing.
 /// </summary>
 /// <param name="field">a group's counter field</param>
 /// <param name="map">the FieldMap that contains the group being checked</param>
 /// <param name="msgType">msg type of message that is/contains <paramref name="map"/></param>
 public void CheckGroupCount(Fields.IField field, FieldMap map, string msgType)
 {
     if(IsGroup(msgType, field.Tag))
     {
         if (map.GetInt(field.Tag) != map.GroupCount(field.Tag))
         {
             throw new RepeatingGroupCountMismatch(field.Tag);
         }
     }
 }
コード例 #6
0
ファイル: Message.cs プロジェクト: baffled/quickfixn
        public string toXMLFields(FieldMap fields, int space)
        {
            StringBuilder s = new StringBuilder();
            string name = string.Empty;

            // fields
            foreach (var f in fields)
            {
                
               s.Append("<field ");
               if ((dataDictionary_ != null) && ( dataDictionary_.FieldsByTag.ContainsKey(f.Key)))
               {
                   s.Append("name=\"" + dataDictionary_.FieldsByTag[f.Key].Name + "\" ");
               }
               s.Append("number=\"" + f.Key.ToString() + "\">");
               s.Append("<![CDATA[" + f.Value.ToString() + "]]>");
               s.Append("</field>");

            }
            // now groups
            List<int> groupTags = fields.GetGroupTags();
            foreach (int groupTag in groupTags)
            {
                for (int counter = 1; counter <= fields.GroupCount(groupTag); counter++)
                {
                    s.Append("<group>");
                    s.Append( toXMLFields( fields.GetGroup(counter, groupTag), space+1));
                    s.Append("</group>");
                }
            }
            
            return s.ToString();
        }