Пример #1
0
 public async Task QueryCard(PadField pad, QueryCardType cardType)
 {
     await SendRequest <EFTQueryCardResponse>(new EFTQueryCardRequest
     {
         QueryCardType        = cardType,
         PurchaseAnalysisData = pad
     });
 }
Пример #2
0
 public async Task DoSettlement(SettlementType settlement, ReceiptCutModeType cutMode,
                                PadField padInfo, ReceiptPrintModeType printMode, bool resetTotals)
 {
     await SendRequest <EFTSettlementResponse>(new EFTSettlementRequest
     {
         SettlementType       = settlement,
         CutReceipt           = cutMode,
         PurchaseAnalysisData = padInfo,
         ReceiptAutoPrint     = printMode,
         ResetTotals          = resetTotals
     });
 }
Пример #3
0
        public bool Equals(Block other)
        {
            bool equals = Fields.Count == other.Fields.Count && BlockName == other.BlockName;

            if (equals)
            {
                for (int i = 0; i < Fields.Count; i++)
                {
                    if (!equals)
                    {
                        break;
                    }
                    Field f1 = Fields[i], f2 = other.Fields[i];
                    equals &= f1.Type == f2.Type;
                    if (equals)
                    {
                        switch (Fields[i].Type)
                        {
                        case FieldType.FieldBlock:
                            BlockField bf1 = (BlockField)f1;
                            BlockField bf2 = (BlockField)f2;
                            equals &= bf1.BlockList.Count == bf2.BlockList.Count;
                            if (equals)
                            {
                                for (int j = 0; j < bf1.BlockList.Count; j++)
                                {
                                    if (equals)
                                    {
                                        equals = bf1.BlockList[j].Equals(bf2.BlockList[j]);
                                    }
                                }
                            }
                            break;

                        case FieldType.FieldStruct:
                            equals &= ((Block)f1.Value).Equals((Block)f2.Value);
                            break;

                        case FieldType.FieldPad:
                            PadField pf1 = (PadField)f1;
                            PadField pf2 = (PadField)f2;
                            for (int j = 0; j < pf1.Length; j++)
                            {
                                if (equals)
                                {
                                    equals &= ((byte[])pf1.Value)[j] == ((byte[])pf2.Value)[j];
                                }
                            }
                            break;

                        default:
                            if (f1.Value == null && f2.Value == null)
                            {
                                continue;
                            }
                            else
                            {
                                equals &= f1.Value.Equals(f2.Value);
                            }
                            break;
                        }
                    }
                }
            }

            return(equals);
        }
Пример #4
0
        public IfpTagBlock(IfpNode ifpNode)
        {
            int size;

            if (ifpNode.HeaderSize > ifpNode.TagBlockSize)
            {
                size = ifpNode.HeaderSize;
            }
            else
            {
                size = ifpNode.TagBlockSize;
            }

            AnalyzeFieldSet(ifpNode.Nodes, size);

            int offset = 0, previousOffset = 0;

            if (ifpNode.Alignment > 0)
            {
                alignment = ifpNode.Alignment;
            }

            bool skipId = false;

            foreach (var node in ifpNode.Nodes)
            {
                Field field = null;
                if (node.FieldOffset >= offset)
                {
                    offset = node.FieldOffset;
                }
                else if (node.FieldOffset > 0)
                {
                    continue;
                }

                if (node.Type == IfpNodeType.Tag)
                {
                    int nodeIndex = ifpNode.Nodes.IndexOf(node);
                    if (ifpNode.Nodes.Count > nodeIndex && ifpNode.Nodes[nodeIndex + 1].Type == IfpNodeType.TagId)
                    {
                        skipId = true;
                        continue;
                    }
                }
                else if (node.Type == IfpNodeType.TagId && skipId)
                {
                    skipId = false;
                    field  = new TagReferenceField(node.Name);
                }
                else
                {
                    switch (node.Type)
                    {
                    case IfpNodeType.TagBlock:
                        field = new IfpBlockField(node);
                        break;

                    case IfpNodeType.UnusedArray:
                        field = new PadField(node.Name, node.Length);
                        break;

                    case IfpNodeType.Byte:
                    case IfpNodeType.SignedByte:
                        field = new CharIntegerField(node.Name);
                        break;

                    case IfpNodeType.Short:
                    case IfpNodeType.UnsignedShort:
                        field = new ShortIntegerField(node.Name);
                        break;

                    case IfpNodeType.Int:
                    case IfpNodeType.UnsignedInt:
                        field = new LongIntegerField(node.Name);
                        break;

                    case IfpNodeType.Single:
                        field = new RealField(node.Name);
                        break;

                    case IfpNodeType.Enumerator8:
                        field = new CharEnumField(node.Name);
                        break;

                    case IfpNodeType.Enumerator16:
                        field = new EnumField(node.Name);
                        break;

                    case IfpNodeType.Enumerator32:
                        field = new LongEnumField(node.Name);
                        break;

                    case IfpNodeType.Bitfield8:
                        field = new ByteFlagsField(node.Name);
                        break;

                    case IfpNodeType.Bitfield16:
                        field = new WordFlagsField(node.Name);
                        break;

                    case IfpNodeType.Bitfield32:
                        field = new LongFlagsField(node.Name);
                        break;

                    case IfpNodeType.String32:
                        field = new StringField(node.Name);
                        break;

                    case IfpNodeType.String64:
                        break;

                    case IfpNodeType.Unicode128:
                        break;

                    case IfpNodeType.Unicode256:
                        break;

                    case IfpNodeType.Tag:
                        field = new TagField(node.Name);
                        break;

                    case IfpNodeType.TagId:
                        field = new TagIndexField(node.Name);
                        break;

                    case IfpNodeType.StringId:
                        field = new StringIdField(node.Name);
                        break;
                    }
                }

                if (field != null)
                {
                    if (node.Type == IfpNodeType.Enumerator8 || node.Type == IfpNodeType.Enumerator16 || node.Type == IfpNodeType.Enumerator32 ||
                        node.Type == IfpNodeType.Bitfield8 || node.Type == IfpNodeType.Bitfield16 || node.Type == IfpNodeType.Bitfield32)
                    {
                        var optionField = (OptionField)field;
                        foreach (var optionNode in node.Nodes)
                        {
                            optionField.Options.Add(new Option(optionNode.Name, optionNode.Value));
                        }
                    }

                    if (previousOffset <= offset)
                    {
                        int length = offset - previousOffset;
                        if (length > 0)
                        {
                            Fields.Add(new PadField("ifp padding", length));
                        }

                        offset        += field.Size;
                        previousOffset = offset;
                        Fields.Add(field);
                    }
                }
            }

            if (offset < size)
            {
                Fields.Add(new PadField("ifp padding", size - offset));
            }

            if (!string.IsNullOrEmpty(ifpNode.Label))
            {
                var labelFields = Fields.Where(f => f.Name.Equals(ifpNode.Label, StringComparison.OrdinalIgnoreCase));
                foreach (var labelField in labelFields)
                {
                    this.labelFields.Add(labelField);
                }
            }
        }