コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="isoField"></param>
        /// <param name="packedBytes"></param>
        /// <param name="index"></param>
        public override void UnPack(ISOComponent isoField, byte[] packedBytes, ref int index)
        {
            // reserve enough bytes to store the length !! ASUMES FOR NOW THAT IS ALWAYS BINARY !!
            switch (m_isoFieldDefinition.lengthCoding)
            {
            case ISOFieldCoding.BIN:
                index += m_isoFieldDefinition.lengthLength / 2;     // 2 HEXADECIMAL DIGITS represent 1 byte
                break;

            case ISOFieldCoding.ASCII:
            case ISOFieldCoding.EBCDIC:
                index += m_isoFieldDefinition.lengthLength;     // 1 ASCII Character is 1 byte
                break;

            case ISOFieldCoding.BCD:

                break;

            default:
                break;
            }


            ISOComponent[] isoFields = ((ISOFieldBitmapSubFields)(isoField)).GetFields();

            isoFields[0] = new ISOFieldBitmap(Logger, m_fieldPackagerList[0], m_fieldPackagerList[0].GetFieldNumber());

            m_fieldPackagerList[0].UnPack(isoFields[0], packedBytes, ref index);
            var bitmap = isoFields[0] as ISOFieldBitmap;

            int[] setFields = bitmap.GetSetFields();

            for (int k = 0; k < setFields.Length; k++)
            {
                int fieldNumber = setFields[k];
                if (fieldNumber != 0)
                {
                    isoFields[fieldNumber] = new ISOField(Logger, m_fieldPackagerList[fieldNumber], m_fieldPackagerList[fieldNumber].GetFieldNumber());
                    m_fieldPackagerList[fieldNumber].UnPack(isoFields[fieldNumber], packedBytes, ref index);
                }
            }
            //int totFields = bitmap.GetLengthInBits();

            //for (int fieldNumber = 1; fieldNumber <= totFields; fieldNumber++)
            //{
            //    if (bitmap.BitIsSet(fieldNumber))
            //    {
            //        isoFields[fieldNumber] = new ISOField(Logger, m_fieldPackagerList[fieldNumber], m_fieldPackagerList[fieldNumber].GetFieldNumber());

            //        m_fieldPackagerList[fieldNumber].UnPack(isoFields[fieldNumber], packedBytes, ref index);
            //    }
            //}
        }
コード例 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="isoField"></param>
        /// <param name="packedBytes"></param>
        /// <param name="index"></param>
        public override void UnPack(ISOComponent isoField, byte[] packedBytes, ref int index)
        {
            bool allMandatoryExist = true;

            ISOComponent[] isoFields = ((ISOMessageFields)(isoField)).GetFields();

            // Unpack the message type from the byteArray for transmission

            isoFields[0] = new ISOField(Logger, m_fieldPackagerList[0], m_fieldPackagerList[0].GetFieldNumber());

            m_fieldPackagerList[0].UnPack(isoFields[0], packedBytes, ref index);

            string msgType = isoFields[0].value;

            // Unpack the Bitmap from the byteArray for transmission

            isoFields[1] = new ISOFieldBitmap(Logger, m_fieldPackagerList[1], m_fieldPackagerList[1].GetFieldNumber());

            m_fieldPackagerList[1].UnPack(isoFields[1], packedBytes, ref index);

            var bitmap = isoFields[1] as ISOFieldBitmap;

            int[] setFields = bitmap.GetSetFields();

            for (int k = 0; k < setFields.Length; k++)
            {
                // special bit fields indicating existance of third and fourth bitmap should not try to pack them
                int fieldNumber = setFields[k];
                if (fieldNumber >= 2 && fieldNumber != 65 && fieldNumber != 129)
                {
                    if (m_fieldPackagerList[fieldNumber].IsComposite())
                    {
                        isoFields[fieldNumber] = new ISOFieldBitmapSubFields(Logger, (ISOFieldBitmapSubFieldsPackager)m_fieldPackagerList[fieldNumber], m_fieldPackagerList[fieldNumber].GetFieldNumber());
                    }
                    else
                    {
                        isoFields[fieldNumber] = new ISOField(Logger, m_fieldPackagerList[fieldNumber], m_fieldPackagerList[fieldNumber].GetFieldNumber());
                    }

                    m_fieldPackagerList[fieldNumber].UnPack(isoFields[fieldNumber], packedBytes, ref index);
                }
            }
            //int totFields = bitmap.GetLengthInBits();

            //for (int fieldNumber = 2; fieldNumber <= totFields; fieldNumber++)
            //{
            //    // special bit fields indicating existance of third and fourth bitmap should not try to pack them

            //    if (fieldNumber != 65 && fieldNumber != 129)
            //    {
            //        // check if current field number is present on message bitmap

            //        if (bitmap.BitIsSet(fieldNumber))
            //        {
            //            if (m_fieldPackagerList[fieldNumber].IsComposite())
            //            {
            //                //if (m_fieldPackagerList[fieldNumber].GetStorageClass() == "ISO8583Net.ISOMessageSubFields")
            //                //{
            //                isoFields[fieldNumber] = new ISOFieldBitmapSubFields(Logger, (ISOFieldBitmapSubFieldsPackager)m_fieldPackagerList[fieldNumber], m_fieldPackagerList[fieldNumber].GetFieldNumber());
            //                //}
            //            }
            //            else
            //            {
            //                    isoFields[fieldNumber] = new ISOField(Logger, m_fieldPackagerList[fieldNumber], m_fieldPackagerList[fieldNumber].GetFieldNumber());
            //            }

            //            m_fieldPackagerList[fieldNumber].UnPack(isoFields[fieldNumber], packedBytes, ref index);
            //        }
            //    }
            //}
        }