Ejemplo n.º 1
0
        private void AcceptUserInput()
        {
            var bye = false;

            while (!bye)
            {
                var input = Console.ReadLine();
                if (input == null)
                {
                    continue;
                }
                var spInput = input.Split(':');
                switch (spInput[0])
                {
                case "pizza":
                    var pres = _spi.InitiatePurchaseTx(RequestIdHelper.Id("pizza"), 1000);
                    if (!pres.Initiated)
                    {
                        Console.WriteLine($"# Could not initiate purchase: {pres.Message}. Please Retry.");
                    }
                    break;

                case "yuck":
                    var yuckres = _spi.InitiateRefundTx(RequestIdHelper.Id("yuck"), 1000);
                    if (!yuckres.Initiated)
                    {
                        Console.WriteLine($"# Could not initiate refund: {yuckres.Message}. Please Retry.");
                    }
                    break;

                case "pos_id":
                    Console.Clear();
                    if (_spi.SetPosId(spInput[1]))
                    {
                        _posId = spInput[1];
                        Console.WriteLine($"## -> POS ID now set to {_posId}");
                    }
                    else
                    {
                        Console.WriteLine($"## -> Could not set POS ID");
                    }
                    PrintStatusAndActions();
                    Console.Write("> ");
                    break;

                case "eftpos_address":
                    Console.Clear();
                    if (_spi.SetEftposAddress(spInput[1]))
                    {
                        _eftposAddress = spInput[1];
                        Console.WriteLine($"## -> Eftpos Address now set to {_eftposAddress}");
                    }
                    else
                    {
                        Console.WriteLine($"## -> Could not set Eftpos Address");
                    }
                    PrintStatusAndActions();
                    Console.Write("> ");
                    break;

                case "pair":
                    _spi.Pair();
                    break;

                case "pair_cancel":
                    _spi.PairingCancel();
                    break;

                case "pair_confirm":
                    _spi.PairingConfirmCode();
                    break;

                case "unpair":
                    _spi.Unpair();
                    break;

                case "tx_sign_accept":
                    _spi.AcceptSignature(true);
                    break;

                case "tx_sign_decline":
                    _spi.AcceptSignature(false);
                    break;

                case "tx_cancel":
                    _spi.CancelTransaction();
                    break;

                case "settle":
                    var settleres = _spi.InitiateSettleTx(RequestIdHelper.Id("settle"));
                    if (!settleres.Initiated)
                    {
                        Console.WriteLine($"# Could not initiate settlement: {settleres.Message}. Please Retry.");
                    }
                    break;

                case "ok":
                    Console.Clear();
                    _spi.AckFlowEndedAndBackToIdle();
                    PrintStatusAndActions();
                    Console.Write("> ");
                    break;

                case "status":
                    Console.Clear();
                    PrintStatusAndActions();
                    break;

                case "bye":
                    bye = true;
                    break;

                case "":
                    Console.Write("> ");
                    break;

                default:
                    Console.WriteLine("# I don't understand. Sorry.");
                    break;
                }
            }
            Console.WriteLine("# BaBye!");
            if (_spiSecrets != null)
            {
                Console.WriteLine($"{_posId}:{_eftposAddress}:{_spiSecrets.EncKey}:{_spiSecrets.HmacKey}");
            }
        }
Ejemplo n.º 2
0
        private void StartHammering()
        {
            if (_hammering)
            {
                Console.WriteLine("Already Hammering.");
            }

            _txAttempts           = 0;
            _disconnects          = 0;
            _reconnects           = 0;
            _lastConnect          = DateTime.Now;
            _lastDisconnect       = DateTime.Now;
            _connectedDuration    = TimeSpan.Zero;
            _disconnectedDuration = TimeSpan.Zero;
            _txSuccesses          = new Dictionary <Message.SuccessState, int>();

            var tmt = new Thread(() =>
            {
                Thread.CurrentThread.IsBackground = true;
                while (_hammering)
                {
                    Console.WriteLine("Initing a purchase");
                    _spi.InitiatePurchaseTx(RequestIdHelper.Id("prchs"), 1000);
                    _txAttempts += 1;
                    do
                    {
                        Thread.Sleep(1000);
                    } while (!_spi.CurrentTxFlowState.Finished);
                    Console.WriteLine("purchase finished");
                    if (_txSuccesses.ContainsKey(_spi.CurrentTxFlowState.Success))
                    {
                        _txSuccesses[_spi.CurrentTxFlowState.Success] += 1;
                    }
                    else
                    {
                        _txSuccesses[_spi.CurrentTxFlowState.Success] = 1;
                    }
                    _spi.AckFlowEndedAndBackToIdle();

                    if (!_hammering)
                    {
                        continue;
                    }
                    var delay = RandomGen.Next(_minTxGap, _maxTxGap);
                    PrintHammerStats();
                    Console.WriteLine($"Sleeping {delay}ms before next transaction");
                    Thread.Sleep(delay);
                }

                if (_spi.CurrentStatus == SpiStatus.PairedConnected)
                {
                    _connectedDuration = _connectedDuration.Add(DateTime.Now.Subtract(_lastConnect));
                }
                else
                {
                    _disconnectedDuration = _disconnectedDuration.Add(DateTime.Now.Subtract(_lastDisconnect));
                }
                Console.WriteLine("Stopped Hammering.");
                Log.Info("Stopped Hammering.");
                PrintHammerStats();

                // Log into app log as well.
                Log.Info($"Attempts {_txAttempts}");
                Log.Info($"Disconnects {_disconnects}");
                Log.Info($"Reconnects {_reconnects}");
                Log.Info($"Time Connected {_connectedDuration}");
                Log.Info($"Time Diconnected {_disconnectedDuration}");
                Log.InfoFormat("Successes {0}", (_txSuccesses.ContainsKey(Message.SuccessState.Success)) ? _txSuccesses[Message.SuccessState.Success] : 0);
                Log.InfoFormat("Failures {0}", (_txSuccesses.ContainsKey(Message.SuccessState.Failed)) ? _txSuccesses[Message.SuccessState.Failed] : 0);
                Log.InfoFormat("Unknowns {0}", (_txSuccesses.ContainsKey(Message.SuccessState.Unknown)) ? _txSuccesses[Message.SuccessState.Unknown] : 0);
            });

            _hammering = true;
            Console.WriteLine("Starting Hammering.");
            Log.Info("Starting Hammering.");
            tmt.Start();
        }