/** * processOpenAccount * * @param udpMessage is an instance of OpenAccountMessage * @throws Exception */ private void processOpenAccount(UDPMessage udpMessage) throws Exception { if (udpMessage.getMessage() instanceof OpenAccountMessage) { OpenAccountMessage msg = (OpenAccountMessage) udpMessage.getMessage(); if (!Env.getCurrentBank().toString().equalsIgnoreCase(msg.getBank())) { msg.setException(new Exception("Wrong Bank Name! Request denied. processOpenAccount")); } else { int accountNumber = -1; try { accountNumber = bank.openAccount( msg.getFirstName(), msg.getLastName(), msg.getEmailAddress(), msg.getPhoneNumber(), msg.getPassword()); } catch (Exception e) { msg.setException(e); accountNumber = -1; } msg.setResultAccountID(accountNumber); msg.setMachineName(Env.getMachineName()); } this.send(udpMessage); } else { throw new Exception("Invalid Object processOpenAccount"); } }
@Test public void testChannel() throws IOException, InterruptedException { String data = "hello"; InetAddress address = InetAddress.getByName("127.0.0.1"); DatagramPacket packet = new DatagramPacket(data.getBytes(), data.length(), address, 5885); DatagramSocket senderSocket = new DatagramSocket(); senderSocket.send(packet); senderSocket.close(); // Wait at most 1 second, 0.1 seconds at a time boolean recievedMessage = false; for (int i = 0; i < 10; i++) { UDPMessage message = channel.popLatestMessage(); if (message != null) { recievedMessage = true; assertEquals("Get the message that we sent", message.getMessage(), "hello"); break; } Thread.sleep(100); } if (!recievedMessage) { fail("We didn't recieve the message after 1 seconds"); } }
public void initReceive() throws IOException { byte[] receiveData = new byte[256]; DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSide.receive(receivePacket); String data = new String(receivePacket.getData(), 0, receivePacket.getLength()); JSONObject jObj = null; try { jObj = (JSONObject) new JSONParser().parse(data); UDPMessage message = new UDPMessage(jObj, getCallback()); message.init(); } catch (ParseException ex) { UDPMessage message = new UDPMessage(data.toString(), getCallback()); message.init(); // System.out.println("data is not json format"); } }
/** * processTransferLoan * * @param udpMessage is an instance of TransferLoanMessage * @throws Exception */ private void processTransferLoan(UDPMessage udpMessage) throws Exception { if (udpMessage.getMessage() instanceof TransferLoanMessage) { TransferLoanMessage msg = (TransferLoanMessage) udpMessage.getMessage(); if (!this.bank.getServerName().equalsIgnoreCase(msg.getCurrentBank())) { msg.setException(new Exception("Wrong Bank Name! Request denied. processTransferLoan")); } else { boolean isTransferred = false; try { isTransferred = bank.transferLoan(msg.getLoanID(), msg.getOtherBank()); } catch (Exception e) { msg.setException(e); } msg.setTransferSuccessful(isTransferred); msg.setMachineName(Env.getMachineName()); } this.send(udpMessage); } else { throw new Exception("Invalid Object processTransferLoan"); } }
/** * processGetLoan * * @param udpMessage is an instance of GetLoanMessage * @throws Exception */ private void processGetLoan(UDPMessage udpMessage) throws Exception { if (udpMessage.getMessage() instanceof GetLoanMessage) { GetLoanMessage msg = (GetLoanMessage) udpMessage.getMessage(); if (!this.bank.getServerName().equalsIgnoreCase(msg.getBank())) { msg.setException(new Exception("Wrong Bank Name! Request denied. processGetLoan")); } else { int loanNumber = -1; try { loanNumber = bank.getLoan(msg.getAccountNumber(), msg.getPassword(), msg.getLoanAmount()); } catch (Exception e) { msg.setException(e); } msg.setResultLoanID(loanNumber); msg.setMachineName(Env.getMachineName()); } this.send(udpMessage); } else { throw new Exception("Invalid Object processGetLoan"); } }
/** * processPrintCustomerInfo * * @param udpMessage is an instance of PrintCustomerInfoMessage * @throws Exception */ private void processPrintCustomerInfo(UDPMessage udpMessage) throws Exception { if (udpMessage.getMessage() instanceof PrintCustomerInfoMessage) { PrintCustomerInfoMessage msg = (PrintCustomerInfoMessage) udpMessage.getMessage(); if (!this.bank.getServerName().equalsIgnoreCase(msg.getBank())) { msg.setException( new Exception("Wrong Bank Name! Request denied. processPrintCustomerInfo")); } else { String result = ""; try { result = bank.printCustomerInfo(); } catch (Exception e) { msg.setException(e); } msg.setResult(result); msg.setMachineName(Env.getMachineName()); } this.send(udpMessage); } else { throw new Exception("Invalid Object processPrintCustomerInfo"); } }
/** * processDelayPayment * * @param udpMessage is an instance of DelayPaymentMessage * @throws Exception */ private void processDelayPayment(UDPMessage udpMessage) throws Exception { if (udpMessage.getMessage() instanceof DelayPaymentMessage) { DelayPaymentMessage msg = (DelayPaymentMessage) udpMessage.getMessage(); if (!this.bank.getServerName().equalsIgnoreCase(msg.getBank())) { msg.setException(new Exception("Wrong Bank Name! Request denied. processDelayPayment")); } else { boolean isDelayed = false; try { isDelayed = bank.delayPayment(msg.getLoanID(), msg.getCurrentDueDate(), msg.getNewDueDate()); } catch (Exception e) { msg.setException(e); } msg.setDelaySuccessful(isDelayed); msg.setMachineName(Env.getMachineName()); } this.send(udpMessage); } else { throw new Exception("Invalid Object processDelayPayment"); } }
/** * Method can be overwritten for FE, Sequencer, Replica, ReplicaManager * * @param bank * @param udpMessage * @throws Exception */ protected void processRequest(UDPMessage udpMessage) throws Exception { switch (udpMessage.getOperation()) { case OpenAccount: processOpenAccount(udpMessage); break; case GetLoan: processGetLoan(udpMessage); break; case DelayPayment: processDelayPayment(udpMessage); break; case PrintCustomerInfo: processPrintCustomerInfo(udpMessage); break; case TransferLoan: processTransferLoan(udpMessage); break; default: Env.log("Unknown regular processRequest! " + udpMessage.getOperation().toString()); break; } }