Пример #1
0
        private void button2_Click(object sender, EventArgs e)
        {
            _errorsDescription.Clear();
            textLoger.Clear();
            Init();

            CRT530Library.ClassCRT530 dispenser = new CRT530Library.ClassCRT530();
            dispenser.logging  = Logger2;
            dispenser.ComPort  = "COM1";
            dispenser.BaudRate = 5;

            if (dispenser.OpenPort("COM1", 5))
            {
                for (int i = 0; i < 80; i++)
                {
                    dispenser.PreDispenseCard(CRT530Library.TypeDispense.LeaveSensor2);
                    Thread.Sleep(2000);
                    DisppenserStatus statusOfDispenser = DisppenserStatus.NoCard;
                    PoolFunction((object)"start_add", ref statusOfDispenser);
                    //Thread.Sleep(5000);
                    PoolFunction((object)"add;25;204", ref statusOfDispenser);
                    Thread.Sleep(1000);
                    dispenser.PreDispenseCard(CRT530Library.TypeDispense.OutDoor);
                    Thread.Sleep(2000);
                }
            }
            dispenser.ClosePort();
            MessageBox.Show("Готово");
        }
Пример #2
0
        private void button1_Click(object sender, EventArgs e)
        {
            Init();
            //PoolFunction((object)"start_sale");
            //return;
            DisppenserStatus statusOfDispenser = DisppenserStatus.NoCard;

            do
            {
                PoolFunction((object)"start_sale", ref statusOfDispenser);
                textLoger.Text += String.Format("\r\nПромежуточный статус: {0}\r\n", statusOfDispenser);
                if (statusOfDispenser == DisppenserStatus.NoCard && statusOfDispenser == DisppenserStatus.DispenserError)
                {
                    break;
                }
                PoolFunction((object)"sale;75;204", ref statusOfDispenser);
            } while (statusOfDispenser != DisppenserStatus.NoCard && statusOfDispenser != DisppenserStatus.DispenserError);
            textLoger.Text += String.Format("\r\nПоследний полученный статус: {0}", statusOfDispenser);
        }
Пример #3
0
        private void PoolFunction(object state, ref DisppenserStatus statusOfDispenser)
        {
            object obj2;

            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
            this._cancel       = true;
            Monitor.Enter(obj2 = _lockObject);
            try
            {
                string str = (string)state;
                Logger("Current Command: " + str, EventEntryType.Event);
                decimal  result   = 0M;
                string[] strArray = str.ToLower().Split(new char[] { ';' });
                string   oldPin   = string.Empty;
                string   newPin   = string.Empty;
                if (((strArray[0] == "sale") || (strArray[0] == "sale_card")) || (strArray[0] == "add"))
                {
                    decimal.TryParse(strArray[1], NumberStyles.Number, CultureInfo.InvariantCulture, out result);
                    _terminalId = strArray[2];
                }
                else if (strArray[0] == "pin")
                {
                    oldPin = strArray[1];
                    newPin = strArray[2];
                }
                else if ((strArray[0] == "start_pin") || (strArray[0] == "start_payment"))
                {
                    _terminalId = strArray[1];
                }
                switch (strArray[0])
                {
                case "start_sale":
                    statusOfDispenser = this.SendAction(CardOperationType.reqSaleCard);
                    return;

                case "start_add":
                    this.SendAction(CardOperationType.reqWriteCard);
                    return;

                case "balance":
                    this.SendAction(CardOperationType.Balance);
                    return;

                case "info":
                    this.SendAction(CardOperationType.Info);
                    return;

                case "payment":
                    //this.Payment();
                    return;

                case "sale":
                    this.Sale(result, _terminalId, false);
                    return;

                case "sale_card":
                    this.Sale(result, _terminalId, true);
                    return;

                case "add":
                    this.Add(result, this._terminalId);
                    return;

                case "cancel":
                    //this.SendCancelCommand(true);
                    return;

                case "start_pin":
                    //this.Status(CardOperationType.reqChangePin);
                    return;

                case "pin":
                    //this.ChangePin(oldPin, newPin);
                    return;

                case "start_payment":
                    this.SendAction(CardOperationType.reqPayment);
                    return;

                case "print":
                    //this.Print();
                    return;

                case "show_commission":
                    //this.ShowCommission();
                    return;
                }
                Logger("Данная команда не поддерживается терминалом: " + str, EventEntryType.CriticalError);
            }
            catch (TimeoutException)
            {
                Logger("TimeoutException. Нет связи с МРК.", EventEntryType.Error);
            }
            catch (SerializeException)
            {
                Logger("SerializeException. Ошибка разбора ответа от МРК", EventEntryType.Error);
            }
            catch (WtfException)
            {
                //this.SendCancelCommand(true);
            }
            catch (MrkErrorException exception)
            {
                string screenMessage = _errorsDescription.ContainsKey(exception.Error.Code) ? _errorsDescription[exception.Error.Code] : "Ошибка карт ридера";
                Logger(string.Concat(new object[] { "Ошибка МРК. Код ошибки: ", exception.Error.Code, " Описание ошибки: ", exception.Error.Description, screenMessage }), EventEntryType.Error);
            }
            catch (Exception exception2)
            {
                Logger("Unexpected error: " + exception2.ToString() + " Внутренняя ошибка терминала.", EventEntryType.Error);
            }
            finally
            {
                Monitor.Exit(obj2);
            }
        }
Пример #4
0
        public DisppenserStatus SendAction(CardOperationType cardOperationType)
        {
            DisppenserStatus result = DisppenserStatus.DispenserError;
            PipeClient       client = new PipeClient();

            client.Logger = Logger;
            string      message   = client.SendPipeMessage(CardOperationType.reqStatus, reqStatus, PipeClient.CONNECT_TIMEOUT, true);
            AnsStatus   status    = (AnsStatus)this.ExtractMessage(message, typeof(AnsStatus));
            MrkStatuses mrkStatus = status.info.MrkStatus;

            if (!mrkStatus.MrkReady)
            {
                //this.SetErrorScreen("status.MrkReady == false", "МРК не готов к работе.", true);
                textLoger.Text += "МРК не готов к работе.";
            }
            else if (cardOperationType != CardOperationType.reqSaleCard)
            {
                if (mrkStatus.ReaderReady == 0)
                {
                    //base.CallBack("SetInfoWithMainMenu", this._readerErrorMessage);
                    Logger("Ошибка", EventEntryType.Error);
                }
                else
                {
                    client.SendPipeMessage(CardOperationType.reqControl_reader_1, "<?xml version='1.0' encoding='Windows-1251'?>\r\n<TCLib version='3.04'>\r\n\t<service>\r\n\t\t<reqControl>\r\n\t\t\t<reader>1</reader>\r\n\t\t</reqControl>\r\n\t</service>\r\n</TCLib>", PipeClient.CONNECT_TIMEOUT, true);
                    //base.CallBack("SetInfoWithMainMenu", this._waitCardMessage);
                    this.StartPooling(cardOperationType);
                    Logger("Ждем", EventEntryType.Event);
                }
            }
            else
            {
                DisppenserStatus dispenserStatus = (DisppenserStatus)mrkStatus.DispenserStatus;
                string           str2            = "Продажа карт запрещена: ";
                string           format          = "Стоимость карты при получении: {0} РУБ.{1}Наличие карт в терминале: {2}";
                decimal          num             = mrkStatus.CardPrice / 100M;
                switch (dispenserStatus)
                {
                case DisppenserStatus.DispenserError:
                    Logger(str2 + "диспенсер не работает", EventEntryType.Error);
                    result = DisppenserStatus.DispenserError;
                    break;

                case DisppenserStatus.NoCard:
                    Logger(string.Format(format, num, Environment.NewLine, "НЕТ"), EventEntryType.Warning);
                    result = DisppenserStatus.NoCard;
                    break;

                case DisppenserStatus.FewCard:
                case DisppenserStatus.ManyCard:
                    if (!(mrkStatus.CardPrice == 0M))
                    {
                        Logger(string.Format(format, num, Environment.NewLine, "ЕСТЬ"), EventEntryType.Event);
                        result = (DisppenserStatus)mrkStatus.DispenserStatus;
                        break;
                    }
                    Logger(str2 + "цена карты не определена.", EventEntryType.Warning);
                    break;
                }
            }
            return(result);
        }