public void releaseClient(Client client) { client.setName(null); client.setNameOperation(null); client.setNumberOperation(0); client.setSequenceNumber(0); poolClient.Add(client); }
//выполняем работу по таймеру 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(); } }