Ejemplo n.º 1
0
        public CardDriverActivity(byte[] value, int activityStructureLength)
        {
            activityDailyRecords = new List <CardActivityDailyRecord>();

            activityPointerOldestDayRecord = ConvertionClass.convertIntoUnsigned2ByteInt(ConvertionClass.arrayCopy(value, 0, 2)); // = first CardActivityDailyRecord
            activityPointerNewestRecord    = ConvertionClass.convertIntoUnsigned2ByteInt(ConvertionClass.arrayCopy(value, 2, 2)); // = last CardActivityDailyRecord
            byte[] records     = new byte[activityStructureLength];
            int    lengthToEnd = records.Length - activityPointerOldestDayRecord;

            Array.Copy(value, 4 + activityPointerOldestDayRecord, records, 0, lengthToEnd);

            if (activityPointerOldestDayRecord != 0)
            {
                Array.Copy(value, 4, records, lengthToEnd, activityPointerOldestDayRecord);
            }
            int activityPointerLastRecordOffset;

            if (activityPointerNewestRecord >= activityPointerOldestDayRecord)
            {
                activityPointerLastRecordOffset = activityPointerNewestRecord - activityPointerOldestDayRecord;
            }
            else
            {
                activityPointerLastRecordOffset = records.Length - activityPointerOldestDayRecord + activityPointerNewestRecord;
            }

            int cardActivityDailyRecordsOffset = 0;

            int cadrActivityPreviousRecordLength = 0;
            int cadrActivityRecordLength         = 0;

            int cadrIntegrityCheckActivityPreviousRecordLength = 0;

            while (cardActivityDailyRecordsOffset <= activityPointerLastRecordOffset)
            {
                int cadrLength = ConvertionClass.convertIntoUnsigned2ByteInt(ConvertionClass.arrayCopy(records, cardActivityDailyRecordsOffset + 2, 2));

                if (cadrLength == 0)
                {
                    break;
                }

                CardActivityDailyRecord cadr = new CardActivityDailyRecord(ConvertionClass.arrayCopy(records, cardActivityDailyRecordsOffset, cadrLength));

                cadrActivityPreviousRecordLength = cadr.activityPreviousRecordLength.cardActivityLengthRange;
                cadrActivityRecordLength         = cadr.activityRecordLength.cardActivityLengthRange;

                cardActivityDailyRecordsOffset += cadrActivityRecordLength;                // next CardActivityDailyRecord

                cadrIntegrityCheckActivityPreviousRecordLength = cadrActivityRecordLength; // save record length for integrity check

                activityDailyRecords.Add(cadr);
            }

            structureSize = 2 + 2 + cardActivityDailyRecordsOffset;
        }
Ejemplo n.º 2
0
        public CardDriverActivity(byte[] value, int activityStructureLength)
        {
            activityDailyRecords = new List<CardActivityDailyRecord>();

            activityPointerOldestDayRecord = ConvertionClass.convertIntoUnsigned2ByteInt(ConvertionClass.arrayCopy(value, 0, 2)); // = first CardActivityDailyRecord
            activityPointerNewestRecord = ConvertionClass.convertIntoUnsigned2ByteInt(ConvertionClass.arrayCopy(value, 2, 2)); // = last CardActivityDailyRecord
            byte[] records = new byte[activityStructureLength];
            int lengthToEnd = records.Length - activityPointerOldestDayRecord;
            Array.Copy(value, 4 + activityPointerOldestDayRecord, records, 0, lengthToEnd);

            if (activityPointerOldestDayRecord != 0)
            {
                Array.Copy(value, 4, records, lengthToEnd, activityPointerOldestDayRecord);
            }
            int activityPointerLastRecordOffset;

            if (activityPointerNewestRecord >= activityPointerOldestDayRecord)
            {
                activityPointerLastRecordOffset = activityPointerNewestRecord - activityPointerOldestDayRecord;
            }
            else
            {
                activityPointerLastRecordOffset = records.Length - activityPointerOldestDayRecord + activityPointerNewestRecord;
            }

            int cardActivityDailyRecordsOffset = 0;

            int cadrActivityPreviousRecordLength = 0;
            int cadrActivityRecordLength = 0;

            int cadrIntegrityCheckActivityPreviousRecordLength = 0;

            while (cardActivityDailyRecordsOffset <= activityPointerLastRecordOffset)
            {
                int cadrLength = ConvertionClass.convertIntoUnsigned2ByteInt(ConvertionClass.arrayCopy(records, cardActivityDailyRecordsOffset + 2, 2));

                if (cadrLength == 0)
                {
                    break;
                }

                CardActivityDailyRecord cadr = new CardActivityDailyRecord(ConvertionClass.arrayCopy(records, cardActivityDailyRecordsOffset, cadrLength));

                cadrActivityPreviousRecordLength = cadr.activityPreviousRecordLength.cardActivityLengthRange;
                cadrActivityRecordLength = cadr.activityRecordLength.cardActivityLengthRange;

                cardActivityDailyRecordsOffset += cadrActivityRecordLength; // next CardActivityDailyRecord

                cadrIntegrityCheckActivityPreviousRecordLength = cadrActivityRecordLength; // save record length for integrity check

                activityDailyRecords.Add(cadr);
            }

            structureSize = 2 + 2 + cardActivityDailyRecordsOffset;
        }