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("Готово"); }
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); }
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); } }
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); }