/// <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); // } //} }
/// <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); // } // } //} }