Exemple #1
0
        /// <summary>
        /// Adds message bytes the rest of the Fields
        /// </summary>
        /// <param name="orderedFieldPositions">fields that need to be builded</param>
        /// <param name="message">message instance</param>
        /// <param name="messageBytes">message bytes as Ref</param>
        private void BuildFields(IEnumerable <int> orderedFieldPositions, IIsoMessage message, ref List <byte> messageBytes)
        {
            foreach (var fieldPosition in orderedFieldPositions)
            {
                IIsoFieldProperties fieldProperties = message.GetFieldByPosition(fieldPosition);

                if (fieldProperties != null)
                {
                    var valueForMessage = fieldProperties.Value;

                    _validator?.EnsureContent(fieldProperties);
                    _validator?.EnsureLength(fieldProperties);

                    if (fieldProperties is IsoField isoField && isoField.Tags != null)
                    {
                        IEnumerable <byte> customFieldBytes = BuildTagFields(isoField);
                        messageBytes.AddRange(fieldProperties.BuildCustomFieldLentgh(customFieldBytes.Count().ToString()));
                        messageBytes.AddRange(customFieldBytes);
                    }
                    else
                    {
                        messageBytes.AddRange(fieldProperties.BuildFieldValue(valueForMessage.ToString()));
                    }
                }
            }
Exemple #2
0
        /// <summary>
        /// Parse Iso Message bytes to IIsoMessage object
        /// </summary>
        /// <param name="isoMessageBytes">bytes to parse</param>
        /// <param name="isoMessage">iso message object</param>
        /// <returns>an IISOMessage object</returns>
        public IIsoMessage Parse(byte[] isoMessageBytes, IIsoMessage isoMessage)
        {
            var currentPosition = 0;

            isoMessage.MTI.Value = isoMessage.MTI.GetFieldValue(isoMessageBytes, ref currentPosition);

            isoMessage.BitMap.Value = ParseBitMap(isoMessage.BitMap, isoMessageBytes, ref currentPosition);
            ParseFields(ref isoMessage, isoMessageBytes, currentPosition);
            //Keep Only Fields with values,
            isoMessage.IsoFieldsCollection = isoMessage.IsoFieldsCollection.Where(p => p.Value != null).ToList();
            return(isoMessage);
        }
Exemple #3
0
        /// <summary>
        /// Build byte from IIsoMessage
        /// </summary>
        /// <param name="message">IIsoMessage instance</param>
        /// <returns>byte array of builded message</returns>
        public byte[] Build(IIsoMessage message)
        {
            //Get Only Fields that Have values or Tags Defined with values
            IEnumerable <int> orderedFieldPositions = message.IsoFieldsCollection
                                                      .Where(c => c.Value != null || (c.Tags?.Count > 0 && c.Tags.Any(tag => tag.Value != null))).Select(c => (int)c.Position);

            var mtiBytes = message.MTI.BuildFieldValue(message.MTI.Value);

            var messageBytes = new List <byte>(mtiBytes);

            messageBytes.AddRange(BuildBitMap(message.BitMap, orderedFieldPositions));

            IEnumerable <int> fieldsToBuild = orderedFieldPositions.Where(pos => pos != (int)IsoFields.F1 && pos != (int)IsoFields.BitMap && pos != (int)IsoFields.MTI);

            BuildFields(fieldsToBuild, message, ref messageBytes);

            return(messageBytes.ToArray());
        }