//задать клиента public void setClient(Client client) { OperationFactory factory = new OperationFactory(); this.client = client; if (this.client != null) { switch (client.getNumberOperation()) { case Credit.CREDIT: currentOperation = factory.createOperation(Credit.CREDIT); break; case Deposit.DEPOSIT: currentOperation = factory.createOperation(Deposit.DEPOSIT); break; case Card.CARD: currentOperation = factory.createOperation(Card.CARD); break; case Transfer.TRANSFER: currentOperation = factory.createOperation(Transfer.TRANSFER); break; case Payment.PAYMENT: currentOperation = factory.createOperation(Payment.PAYMENT); break; } Random r = new Random(); this.currentOperation.setTimeOperation(r.Next(this.currentOperation.getMinTimeOperation(), this.currentOperation.getMinTimeOperation())); this.state = new BankWindowBusyState(); } notify(); }
//задать клиента public override void setClient(Client client) { this.client = client; switch (client.getNumberOperation()) { case Credit.CREDIT: currentOperation = new Credit(); break; case Deposit.DEPOSIT: currentOperation = new Deposit(); break; case Card.CARD: currentOperation = new Card(); break; case Transfer.TRANSFER: currentOperation = new Transfer(); break; case Payment.PAYMENT: currentOperation = new Payment(); break; case CurrencyExchangeAdapter.CURRENCYEXCHANGE: currentOperation = new CurrencyExchangeAdapter(new CurrencyExchange()); break; } Random r = new Random(); this.currentOperation.setTimeOperation(r.Next(this.currentOperation.getMinTimeOperation(), this.currentOperation.getMinTimeOperation())); this.isFree = false; }
//выполняем работу по таймеру private void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e) { OperationFactory factory = new OperationFactory(); Random r = new Random(); int numberOfClients = r.Next(this.numberOfNewClients + 1); for (int i = 0; i < numberOfClients; i++) { Client client = new Client(); int numberName = r.Next(this.nameClients.Count); switch (r.Next(1,NUMBER_OF_OPERATION+1)) { case 1: client.setName(this.nameClients[numberName]); client.setNumberOperation(Credit.CREDIT); client.setNameOperation(factory.createOperation(Credit.CREDIT).getNameOperation()); break; case 2: client.setName(this.nameClients[numberName]); client.setNumberOperation(Deposit.DEPOSIT); client.setNameOperation(factory.createOperation(Deposit.DEPOSIT).getNameOperation()); break; case 3: client.setName(this.nameClients[numberName]); client.setNumberOperation(Card.CARD); client.setNameOperation(factory.createOperation(Card.CARD).getNameOperation()); break; case 4: client.setName(this.nameClients[numberName]); client.setNumberOperation(Transfer.TRANSFER); client.setNameOperation(factory.createOperation(Transfer.TRANSFER).getNameOperation()); break; case 5: client.setName(this.nameClients[numberName]); client.setNumberOperation(Payment.PAYMENT); client.setNameOperation(factory.createOperation(Payment.PAYMENT).getNameOperation()); break; } this.clientQueue.addToQueue(client); } for (int i = 0; i < this.listBankWindows.Count; i++) { //если окно свободно и в очереди есть клиенты, то выбираем клиента из очереди и отправлям к окну if ((this.listBankWindows[i].getState().GetType() == typeof(BankWindowFreeState)) && this.clientQueue.getClientCount() != 0) { List<IOperation> processOperation = this.listBankWindows[i].getProcessOperation(); for (int j = 0; j < this.clientQueue.getClientCount(); j++) { Client client = this.clientQueue.takeFromQueue(j); for (int k = 0; k < processOperation.Count; k++) { if (client.getNumberOperation() == processOperation[k].getNumberOperation()) { this.listBankWindows[i].setClient(client); this.clientQueue.removeFromQueue(j); break; } } if (this.listBankWindows[i].getState().GetType() == typeof(BankWindowBusyState)) { break; } } } this.listBankWindows[i].performOperation(); } }
//задать клиента public void setClient(Client client) { this.client = client; switch (client.getNumberOperation()) { case Credit.CREDIT: currentOperation = this.manager.getOperation(Credit.CREDIT); break; case Deposit.DEPOSIT: currentOperation = this.manager.getOperation(Deposit.DEPOSIT); break; case Card.CARD: currentOperation = this.manager.getOperation(Card.CARD); break; case Transfer.TRANSFER: currentOperation = this.manager.getOperation(Transfer.TRANSFER); break; case Payment.PAYMENT: currentOperation = this.manager.getOperation(Payment.PAYMENT); break; } Random r = new Random(); this.currentOperation.setTimeOperation(r.Next(this.currentOperation.getMinTimeOperation(), this.currentOperation.getMinTimeOperation())); this.isFree = false; }