diff --git a/banking-client/src/main/java/ufrn/imd/controller/Controller.java b/banking-client/src/main/java/ufrn/imd/controller/Controller.java index 580d6e5bd0706569fec236bf1337a7adbf06e7f8..ab932a257b9079b16d646302917bf7b768d00eb4 100644 --- a/banking-client/src/main/java/ufrn/imd/controller/Controller.java +++ b/banking-client/src/main/java/ufrn/imd/controller/Controller.java @@ -1,10 +1,13 @@ package ufrn.imd.controller; import ufrn.imd.domain.Client; +import ufrn.imd.utils.ServerResponse; import java.rmi.Remote; import java.rmi.RemoteException; public interface Controller extends Remote { public void registerClient(Client client) throws RemoteException; + + public ServerResponse getResponse(Client client) throws RemoteException; } diff --git a/banking-client/src/main/java/ufrn/imd/utils/MachineState.java b/banking-client/src/main/java/ufrn/imd/utils/MachineState.java index b7a227b0c320a833e457e69b08612342be8b1292..b810c0cc1104fe4426a0079faab304ba9f2783e2 100644 --- a/banking-client/src/main/java/ufrn/imd/utils/MachineState.java +++ b/banking-client/src/main/java/ufrn/imd/utils/MachineState.java @@ -2,6 +2,7 @@ package ufrn.imd.utils; import lombok.Data; import ufrn.imd.controller.Controller; +import ufrn.imd.domain.Account; import ufrn.imd.domain.Client; import java.net.MalformedURLException; @@ -10,19 +11,18 @@ import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.util.Scanner; +import static ufrn.imd.utils.NameSpace.HOST_BALANCE_SERVICE; import static ufrn.imd.utils.NameSpace.HOST_DEPOSIT_SERVICE; @Data public class MachineState { public static final String INITIAL= "INITIAL"; - public static final String RENDER = "RENDER"; - public static final String UPDATE_STATE = "UPDATE_STATE"; public static final String READ = "READ"; public static final String DEPOSIT = "DEPOSIT"; public static final String BALANCE = "BALANCE"; - public static final String HELP = "HELP"; + public static final String START = "START"; public static final String INVALID_INPUT = "INVALID_INPUT"; public static final String QUIT = "QUIT"; @@ -42,32 +42,48 @@ public class MachineState { public void update() { if(state.equals(INITIAL)) { - state = HELP; - } else if(state.equals(HELP)) { + state = START; + } else if(state.equals(START)) { state = READ; } else if(state.equals(READ)) { state = inputValue; } else if(state.equals(INVALID_INPUT)) { - state = HELP; + state = START; } else if(state.equals(DEPOSIT)) { - state = HELP; + state = START; + } else if(state.equals(BALANCE)) { + state = START; } } public void processEvents() throws MalformedURLException, NotBoundException, RemoteException { if(state.equals(READ)) { - inputValue = new String(); inputValue = sc.nextLine().trim().toUpperCase(); - System.out.println(String.format(">>> input value: %s", inputValue)); - if(!inputValue.equals(DEPOSIT) && !inputValue.equals(DEPOSIT) && !inputValue.equals(BALANCE)){ + if(!inputValue.isEmpty() && + !inputValue.equals(QUIT) && + !inputValue.equals(DEPOSIT) && + !inputValue.equals(BALANCE)) { inputValue = INVALID_INPUT; } } else if(state.equals(DEPOSIT)) { - double v = sc.nextDouble(); - System.out.println(String.format(">>> input value: %.2f", v)); + String v = sc.nextLine(); Client client = new Client(1); Controller server = (Controller) Naming.lookup(HOST_DEPOSIT_SERVICE); - server.registerClient(client); + ServerResponse response = server.getResponse(client); + if(response.getStatus() == 200) { + System.out.println( + String.format(">>> Your balance is: %.2f", ((Account)response.getBody()).getBalance()) + ); + } + } else if(state.equals(BALANCE)) { + Client client = new Client(1); + Controller server = (Controller) Naming.lookup(HOST_BALANCE_SERVICE); + ServerResponse response = server.getResponse(client); + if(response.getStatus() == 200) { + System.out.println( + String.format(">>> Your balance is: %.2f", ((Account)response.getBody()).getBalance()) + ); + } } } @@ -76,7 +92,7 @@ public class MachineState { if(state.equals(INITIAL)) { System.out.println(">>> Initializing..."); Thread.sleep(1000); - } else if(state.equals(HELP)) { + } else if(state.equals(START)) { System.out.println("These are the avaliable operations"); System.out.println("---------------------------------"); System.out.println(" - deposit \t - balance"); diff --git a/banking-client/src/main/java/ufrn/imd/utils/NameSpace.java b/banking-client/src/main/java/ufrn/imd/utils/NameSpace.java index c3793547e6dee27aa654ce21634053dd6c23b448..4bc802f6489a95bc8c7e7d95101c782fdaf09d3d 100644 --- a/banking-client/src/main/java/ufrn/imd/utils/NameSpace.java +++ b/banking-client/src/main/java/ufrn/imd/utils/NameSpace.java @@ -2,5 +2,8 @@ package ufrn.imd.utils; public class NameSpace { public static final Integer PORT_DEPOSIT_SERVICE = 1907; + public static final Integer PORT_BALANCE_SERVICE = 1908; public static final String HOST_DEPOSIT_SERVICE = String.format("rmi://127.0.0.1:%d/%s", PORT_DEPOSIT_SERVICE, "deposit"); + public static final String HOST_BALANCE_SERVICE = String.format("rmi://127.0.0.1:%d/%s", PORT_BALANCE_SERVICE, "balance"); + } diff --git a/banking-client/src/main/java/ufrn/imd/utils/ServerResponse.java b/banking-client/src/main/java/ufrn/imd/utils/ServerResponse.java new file mode 100644 index 0000000000000000000000000000000000000000..4c1115b4648ee5503d0ebdb68cc5982e97f96794 --- /dev/null +++ b/banking-client/src/main/java/ufrn/imd/utils/ServerResponse.java @@ -0,0 +1,20 @@ +package ufrn.imd.utils; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@Builder +public class ServerResponse implements Serializable { + private static final long serialVersionUID = 1L; + + private Integer status; + private String message; + private Object body; +} diff --git a/banking-server/src/main/java/ufrn/imd/BankingServerApp.java b/banking-server/src/main/java/ufrn/imd/BankingServerApp.java index 7acd207f24982bf2667e354a6c1f35b77cf355af..39928e11f922805d6b10e203c631cd9b19c5364c 100644 --- a/banking-server/src/main/java/ufrn/imd/BankingServerApp.java +++ b/banking-server/src/main/java/ufrn/imd/BankingServerApp.java @@ -13,9 +13,9 @@ import java.rmi.RemoteException; public class BankingServerApp { public static void main(String[] args) throws RemoteException, MalformedURLException, AlreadyBoundException { - - DepositServiceImpl depositService = new DepositServiceImpl(new ClientRepository()); - BalanceServiceImpl balanceService = new BalanceServiceImpl(new ClientRepository()); + ClientRepository clientRepository = new ClientRepository(); + DepositServiceImpl depositService = new DepositServiceImpl(clientRepository); + BalanceServiceImpl balanceService = new BalanceServiceImpl(clientRepository); Controller depositController = new DepositControllerImpl(depositService); Controller balanceController = new BalanceControllerImpl(balanceService); diff --git a/banking-server/src/main/java/ufrn/imd/controller/Controller.java b/banking-server/src/main/java/ufrn/imd/controller/Controller.java index 824205a78effedd521e934e17809e5bfcc593a71..ab932a257b9079b16d646302917bf7b768d00eb4 100644 --- a/banking-server/src/main/java/ufrn/imd/controller/Controller.java +++ b/banking-server/src/main/java/ufrn/imd/controller/Controller.java @@ -1,6 +1,7 @@ package ufrn.imd.controller; import ufrn.imd.domain.Client; +import ufrn.imd.utils.ServerResponse; import java.rmi.Remote; import java.rmi.RemoteException; @@ -8,4 +9,5 @@ import java.rmi.RemoteException; public interface Controller extends Remote { public void registerClient(Client client) throws RemoteException; + public ServerResponse getResponse(Client client) throws RemoteException; } diff --git a/banking-server/src/main/java/ufrn/imd/controller/impl/BalanceControllerImpl.java b/banking-server/src/main/java/ufrn/imd/controller/impl/BalanceControllerImpl.java index 0c51991cd1d1c609e46d4192e603a6ab4b568b83..8ae43332ba961fda0f7a7dcf5396e189462d47c3 100644 --- a/banking-server/src/main/java/ufrn/imd/controller/impl/BalanceControllerImpl.java +++ b/banking-server/src/main/java/ufrn/imd/controller/impl/BalanceControllerImpl.java @@ -3,6 +3,7 @@ package ufrn.imd.controller.impl; import ufrn.imd.controller.Controller; import ufrn.imd.domain.Client; import ufrn.imd.service.impl.BalanceServiceImpl; +import ufrn.imd.utils.ServerResponse; import java.net.MalformedURLException; import java.rmi.AlreadyBoundException; @@ -19,6 +20,7 @@ import static ufrn.imd.utils.NameSpace.PORT_BALANCE_SERVICE; public class BalanceControllerImpl extends UnicastRemoteObject implements Controller { private volatile Queue<Client> clients = new ArrayDeque<>(); + private final BalanceServiceImpl service; public BalanceControllerImpl(BalanceServiceImpl service) throws RemoteException, MalformedURLException, AlreadyBoundException { super(); @@ -26,8 +28,8 @@ public class BalanceControllerImpl extends UnicastRemoteObject implements Contro LocateRegistry.createRegistry(PORT_BALANCE_SERVICE); Naming.bind(HOST_BALANCE_SERVICE, this); log.info("Starting Deposit service!"); - - new Notify(service).start(); + this.service = service; +// new Notify(service).start(); log.info(String.format("Initializing server in %s", HOST_BALANCE_SERVICE)); } @@ -39,7 +41,10 @@ public class BalanceControllerImpl extends UnicastRemoteObject implements Contro log.info(String.format("total users: %d", clients.size())); } - + @Override + public ServerResponse getResponse(Client client) throws RemoteException { + return this.service.balance(Optional.of(client)); + } private class Notify extends Thread{ diff --git a/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java b/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java index d9b3df5950323de0002ab2dd569206be9d510578..179ed838cded8ecab6193c7badfafc0c10e9fc12 100644 --- a/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java +++ b/banking-server/src/main/java/ufrn/imd/controller/impl/DepositControllerImpl.java @@ -4,6 +4,7 @@ import lombok.extern.java.Log; import ufrn.imd.controller.Controller; import ufrn.imd.domain.Client; import ufrn.imd.service.impl.DepositServiceImpl; +import ufrn.imd.utils.ServerResponse; import java.net.MalformedURLException; import java.rmi.AlreadyBoundException; @@ -20,15 +21,18 @@ import static ufrn.imd.utils.NameSpace.PORT_DEPOSIT_SERVICE; public class DepositControllerImpl extends UnicastRemoteObject implements Controller { private volatile Queue<Client> clients = new ArrayDeque<>(); + private final DepositServiceImpl service; + + private volatile Queue<ServerResponse> serverResponses = new ArrayDeque<>(); public DepositControllerImpl(DepositServiceImpl service) throws RemoteException, MalformedURLException, AlreadyBoundException { super(); log.info("Starting Deposit service!"); - new Notify(service).start(); +// new Notify(service).start(); log.info(String.format("Initializing server in %s", HOST_DEPOSIT_SERVICE)); + this.service = service; LocateRegistry.createRegistry(PORT_DEPOSIT_SERVICE); - Naming.bind(HOST_DEPOSIT_SERVICE, this); } @@ -39,7 +43,9 @@ public class DepositControllerImpl extends UnicastRemoteObject implements Contro log.info(String.format("total users: %d", clients.size())); } - + public ServerResponse getResponse(Client client) throws RemoteException { + return this.service.deposit(200.00, Optional.of(client)); + } private class Notify extends Thread{ @@ -61,8 +67,8 @@ public class DepositControllerImpl extends UnicastRemoteObject implements Contro clients.stream().forEach(client -> { try { log.info(String.format("Clients waiting %d", clients.size())); - this.service.deposit(200.00, Optional.of(client)); - clients.remove(); + ServerResponse deposit = this.service.deposit(200.00, Optional.of(client)); + serverResponses.add(deposit); log.info(String.format("Clients waiting %d", clients.size())); } catch (RemoteException e) { diff --git a/banking-server/src/main/java/ufrn/imd/service/impl/BalanceServiceImpl.java b/banking-server/src/main/java/ufrn/imd/service/impl/BalanceServiceImpl.java index 469601d1bb75fb17afbd2fe1c3d9a98dcd3afb2e..95e9373b04f05a6a480bb1db696ea8dba9a12c6f 100644 --- a/banking-server/src/main/java/ufrn/imd/service/impl/BalanceServiceImpl.java +++ b/banking-server/src/main/java/ufrn/imd/service/impl/BalanceServiceImpl.java @@ -6,6 +6,7 @@ import ufrn.imd.domain.Account; import ufrn.imd.domain.Client; import ufrn.imd.repository.Repository; import ufrn.imd.service.Service; +import ufrn.imd.utils.ServerResponse; import java.rmi.RemoteException; import java.util.Optional; @@ -17,7 +18,7 @@ public class BalanceServiceImpl implements Service { private final Repository<Client> clientRepository; - public void balance(Optional<Client> clientOptional) throws RemoteException { + public ServerResponse balance(Optional<Client> clientOptional) throws RemoteException { Client user = clientOptional .orElseThrow(() -> new RuntimeException("NULL USER")); Client client = clientRepository.find(user.getId()) @@ -25,5 +26,10 @@ public class BalanceServiceImpl implements Service { Account account = client.getAccount(); log.info(String.format("Account Balance: R$ %f", account.getBalance())); + return ServerResponse.builder() + .status(200) + .message("Operation sucessed!") + .body(account) + .build(); } } diff --git a/banking-server/src/main/java/ufrn/imd/service/impl/DepositServiceImpl.java b/banking-server/src/main/java/ufrn/imd/service/impl/DepositServiceImpl.java index e7a86534678ccca34c0e0082c9bb92b2bfff00b5..83c894a8ff303a41d301feb7e19532417f07f66c 100644 --- a/banking-server/src/main/java/ufrn/imd/service/impl/DepositServiceImpl.java +++ b/banking-server/src/main/java/ufrn/imd/service/impl/DepositServiceImpl.java @@ -6,6 +6,7 @@ import ufrn.imd.domain.Account; import ufrn.imd.domain.Client; import ufrn.imd.repository.Repository; import ufrn.imd.service.Service; +import ufrn.imd.utils.ServerResponse; import java.rmi.RemoteException; import java.util.Optional; @@ -17,7 +18,7 @@ public class DepositServiceImpl implements Service { private final Repository<Client> repository; - public void deposit(Double value, Optional<Client> clientOptional) throws RemoteException, RuntimeException { + public ServerResponse deposit(Double value, Optional<Client> clientOptional) throws RemoteException, RuntimeException { Client user = clientOptional .orElseThrow(() -> new RuntimeException("Null User!")); Client client = repository.find(user.getId()) @@ -26,6 +27,11 @@ public class DepositServiceImpl implements Service { account.setBalance(account.getBalance() + value); log.info(String.format("Deposit concluded!")); log.info(String.format("Total: %.2f", account.getBalance())); + return ServerResponse.builder() + .status(200) + .message("Operaiton sucessed!") + .body(account) + .build(); } } diff --git a/banking-server/src/main/java/ufrn/imd/utils/ServerResponse.java b/banking-server/src/main/java/ufrn/imd/utils/ServerResponse.java new file mode 100644 index 0000000000000000000000000000000000000000..4c1115b4648ee5503d0ebdb68cc5982e97f96794 --- /dev/null +++ b/banking-server/src/main/java/ufrn/imd/utils/ServerResponse.java @@ -0,0 +1,20 @@ +package ufrn.imd.utils; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@Builder +public class ServerResponse implements Serializable { + private static final long serialVersionUID = 1L; + + private Integer status; + private String message; + private Object body; +} diff --git a/banking-server/target/classes/ufrn/imd/BankingServerApp.class b/banking-server/target/classes/ufrn/imd/BankingServerApp.class index e7bc89caf443850f74b54ca56cfedf3e1bb21797..9426e1eeb07564495580cebd9a9fb3d4826bfbdf 100644 Binary files a/banking-server/target/classes/ufrn/imd/BankingServerApp.class and b/banking-server/target/classes/ufrn/imd/BankingServerApp.class differ diff --git a/banking-server/target/classes/ufrn/imd/controller/Controller.class b/banking-server/target/classes/ufrn/imd/controller/Controller.class index f430dd8e588b7787d3b1e57839844a0ca969b2ba..9f65cc4b43514c694d42fba6e72344725bc510de 100644 Binary files a/banking-server/target/classes/ufrn/imd/controller/Controller.class and b/banking-server/target/classes/ufrn/imd/controller/Controller.class differ diff --git a/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl$Notify.class b/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl$Notify.class index 6f1fd296957eb44ef8553d3843aed5dde42adc51..05c9dcdc8d1772381efcdb551579129b88ee152d 100644 Binary files a/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl$Notify.class and b/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl$Notify.class differ diff --git a/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl.class b/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl.class index 9f55bf8b7d1a386ab7716d59ba2a4476c94238ce..fabf3e6087f27cc0d99ba3f18efed1ab04119893 100644 Binary files a/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl.class and b/banking-server/target/classes/ufrn/imd/controller/impl/BalanceControllerImpl.class differ diff --git a/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl$Notify.class b/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl$Notify.class index b8477ef07534ba6cd062501ed1b04324a2d61879..1e65ef3171eb3e0c93d93fa451f58c6ac729a57c 100644 Binary files a/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl$Notify.class and b/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl$Notify.class differ diff --git a/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl.class b/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl.class index 47a33bc2bcf84a94279a49f43193a5456f898b72..ebfe39d9843762fa90cc9a12183aefdcd3f8aded 100644 Binary files a/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl.class and b/banking-server/target/classes/ufrn/imd/controller/impl/DepositControllerImpl.class differ diff --git a/banking-server/target/classes/ufrn/imd/service/impl/BalanceServiceImpl.class b/banking-server/target/classes/ufrn/imd/service/impl/BalanceServiceImpl.class index b4fa9209a9ee6e21b9c3435e2894b0809385ba08..57779ee31278c81ffb0caab53459b83b0f814be4 100644 Binary files a/banking-server/target/classes/ufrn/imd/service/impl/BalanceServiceImpl.class and b/banking-server/target/classes/ufrn/imd/service/impl/BalanceServiceImpl.class differ diff --git a/banking-server/target/classes/ufrn/imd/service/impl/DepositServiceImpl.class b/banking-server/target/classes/ufrn/imd/service/impl/DepositServiceImpl.class index cf644482cf2f5b0e07d532cd3dfeb33d543e52c6..7663a247d03d86603195f6987564d6775fa06d0b 100644 Binary files a/banking-server/target/classes/ufrn/imd/service/impl/DepositServiceImpl.class and b/banking-server/target/classes/ufrn/imd/service/impl/DepositServiceImpl.class differ