示例#1
0
        public void HandleEvent(IEvent @event)
        {
            if (null == @event)
            {
                return;
            }

            if (null != @event.Transaction)
            {
                ServerResources.Dispose(@event.Transaction);
                AddStatistics(@event);
            }

            var tempQueue = new Queue <Transaction>();

            while (TransactionsQueue.TryDequeue(out var transaction))
            {
                if (ServerResources.IsHandleAllowed(transaction))
                {
                    ServerResources.AllocateForTransaction(transaction);
                    EventsCollector.AddEvent(new OutputEvent(transaction));
                }
                else
                {
                    tempQueue.Enqueue(transaction);
                }
            }

            while (tempQueue.TryDequeue(out var transaction))
            {
                TransactionsQueue.Enqueue(transaction);
            }
        }
示例#2
0
        private void commandToolStripMenuItem_Click(object sender, EventArgs e)
        {
            UpdateOutput("A account is created, transaction commands are queued up then committed, the results are displayed.");

            BankAccount       bankAccount = new BankAccount();
            TransactionsQueue queue       = new TransactionsQueue();

            CommandAbstract command;

            UpdateOutput("Beginning account balance: " + bankAccount.Balance.ToString());

            command = new DepositCommand(bankAccount, 50);
            queue.AddTransaction(command);
            UpdateOutput("Depositing 50");

            command = new DepositCommand(bankAccount, 20);
            queue.AddTransaction(command);
            UpdateOutput("Depositing 20");

            command = new WithdrawCommand(bankAccount, 10);
            queue.AddTransaction(command);
            UpdateOutput("Withdrawing 10");

            UpdateOutput("Before committing account balance: " + bankAccount.Balance.ToString());
            queue.CommitTransactions();

            UpdateOutput("Final account balance: " + bankAccount.Balance.ToString());
        }
        public void TransactionQueueAddTest()
        {
            BankAccount       bankAccount = new BankAccount();
            WithdrawCommand   command     = new WithdrawCommand(bankAccount, 10);
            TransactionsQueue queue       = new TransactionsQueue();

            queue.AddTransaction(command);

            Assert.AreEqual(queue.TransactionQueueCount, 1);
        }
        public void HandleEvent(IEvent @event)
        {
            var transaction = _transactionCreator.CreateTransactionByType();

            AddStatistics(transaction);

            if (ServerResources.IsHandleAllowed(transaction))
            {
                ServerResources.AllocateForTransaction(transaction);
                EventsCollector.AddEvent(new OutputEvent(transaction));
            }
            else
            {
                TransactionsQueue.Enqueue(transaction);
            }

            EventsCollector.AddEvent(new InputEvent());
        }
示例#5
0
 public void QueueTransaction(ITransaction transaction) => TransactionsQueue.Enqueue(transaction);
        public void TransactionsQueueCreateTest()
        {
            TransactionsQueue command = new TransactionsQueue();

            Assert.IsInstanceOfType(command, typeof(TransactionsQueue));
        }