diff --git a/banking/src/ufrn/imd/BankingServerApp.java b/banking/src/ufrn/imd/BankingServerApp.java index d02eeed8352c7d4eeef9c1dc23733fa7192e5500..4fed7390ea3b7b3ab9901b8f402f99065adf9142 100644 --- a/banking/src/ufrn/imd/BankingServerApp.java +++ b/banking/src/ufrn/imd/BankingServerApp.java @@ -1,8 +1,11 @@ package ufrn.imd; import ufrn.imd.controller.Controller; +import ufrn.imd.controller.impl.BalanceControllerImpl; import ufrn.imd.controller.impl.DepositControllerImpl; +import ufrn.imd.service.BalanceService; import ufrn.imd.service.DepositService; +import ufrn.imd.service.impl.BalanceServiceImpl; import ufrn.imd.service.impl.DepositServiceImpl; import java.net.MalformedURLException; @@ -13,7 +16,10 @@ public class BankingServerApp { public static void main(String[] args) throws RemoteException, MalformedURLException, AlreadyBoundException { DepositService depositService = new DepositServiceImpl(); + BalanceService balanceService = new BalanceServiceImpl(); + Controller depositController = new DepositControllerImpl(depositService); + Controller balanceController = new BalanceControllerImpl(balanceService); } diff --git a/banking/src/ufrn/imd/controller/Controller.java b/banking/src/ufrn/imd/controller/Controller.java index ebdc052114a1ec006c253cdf5d043b3be3451176..36dc9b4c23f85da1774874073ce187064e596202 100644 --- a/banking/src/ufrn/imd/controller/Controller.java +++ b/banking/src/ufrn/imd/controller/Controller.java @@ -1,10 +1,12 @@ package ufrn.imd.controller; -import ufrn.imd.message.Client; +import ufrn.imd.domain.Client; import java.rmi.Remote; import java.rmi.RemoteException; +import java.util.List; public interface Controller extends Remote { public void registerClient(Client client) throws RemoteException; + } diff --git a/banking/src/ufrn/imd/controller/impl/BalanceControllerImpl.java b/banking/src/ufrn/imd/controller/impl/BalanceControllerImpl.java index 74616ba5a8fc3f09a0b431588164daccb0ee93ae..4dd0bb54d3cfc7c01a7e6ee8efcf3b71adb573d8 100644 --- a/banking/src/ufrn/imd/controller/impl/BalanceControllerImpl.java +++ b/banking/src/ufrn/imd/controller/impl/BalanceControllerImpl.java @@ -1,2 +1,94 @@ -package ufrn.imd.controller.impl;public class BalanceControllerImpl { +package ufrn.imd.controller.impl; + +import ufrn.imd.controller.Controller; +import ufrn.imd.domain.Client; +import ufrn.imd.service.BalanceService; +import ufrn.imd.service.DepositService; +import ufrn.imd.service.impl.BalanceServiceImpl; +import ufrn.imd.utils.Log; + +import java.net.MalformedURLException; +import java.rmi.AlreadyBoundException; +import java.rmi.Naming; +import java.rmi.RemoteException; +import java.rmi.registry.LocateRegistry; +import java.rmi.server.UnicastRemoteObject; +import java.util.ArrayList; +import java.util.List; + +import static ufrn.imd.utils.NameSpace.*; + +public class BalanceControllerImpl extends UnicastRemoteObject implements Controller { + + private volatile List<Client> clients = new ArrayList<>(); + + public BalanceControllerImpl(BalanceService service) throws RemoteException, MalformedURLException, AlreadyBoundException { + super(); + Log.info(BalanceServiceImpl.class, "Starting Deposit service!"); + + new Notify(service).start(); + + Log.info(BalanceServiceImpl.class, + String.format("Initializing server in %s", HOST_BALANCE_SERVICE)); + + LocateRegistry.createRegistry(PORT_BALANCE_SERVICE); + + Naming.bind(HOST_BALANCE_SERVICE, this); + } + + @Override + public void registerClient(Client client) throws RemoteException { + clients.add(client); + Log.info(BalanceService.class, "new client registred"); + Log.info(BalanceService.class, String.format("total users: %d", clients.size())); + } + + + + + private class Notify extends Thread{ + + private final BalanceService service; + + public Notify(BalanceService service) { + super(); + this.service = service; + } + public void run() { + + for(;;) { + if(clients.size() > 0) { + + Log.info( + BalanceService.class, + "notyfing the clients!" + ); + int i = 0; + for (Client client : clients) { + + try { + this.service.balance(client.getAccount()); + + } catch (RemoteException e) { + e.printStackTrace(); + } + } + try { + Thread.sleep(15 * 1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } else { + try { + Thread.sleep(15 * 1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + Log.info(BalanceService.class, "No there's clients!"); + } + + } + + } + } } diff --git a/banking/src/ufrn/imd/controller/impl/DepositControllerImpl.java b/banking/src/ufrn/imd/controller/impl/DepositControllerImpl.java index ef27d6eac3fbff184401c19e0ca118e6ede7c68f..34cccd467fdc2a911cbb8f231d7651866b6d5c73 100644 --- a/banking/src/ufrn/imd/controller/impl/DepositControllerImpl.java +++ b/banking/src/ufrn/imd/controller/impl/DepositControllerImpl.java @@ -1,8 +1,8 @@ package ufrn.imd.controller.impl; import ufrn.imd.controller.Controller; -import ufrn.imd.log.Log; -import ufrn.imd.message.Client; +import ufrn.imd.utils.Log; +import ufrn.imd.domain.Client; import ufrn.imd.service.DepositService; import java.net.MalformedURLException; @@ -14,21 +14,22 @@ import java.rmi.server.UnicastRemoteObject; import java.util.ArrayList; import java.util.List; -import static ufrn.imd.nameSpace.NameSpace.HOST_DEPOSIT_SERVICE; -import static ufrn.imd.nameSpace.NameSpace.PORT_DEPOSIT_SERVICE; +import static ufrn.imd.utils.NameSpace.HOST_DEPOSIT_SERVICE; +import static ufrn.imd.utils.NameSpace.PORT_DEPOSIT_SERVICE; public class DepositControllerImpl extends UnicastRemoteObject implements Controller { private volatile List<Client> clients = new ArrayList<>(); - public DepositControllerImpl(DepositService service) throws RemoteException, MalformedURLException, AlreadyBoundException { super(); Log.info(DepositControllerImpl.class, "Starting Deposit service!"); - new Notify(service).start(); + new Notify(service).start(); Log.info(DepositControllerImpl.class, String.format("Initializing server in %s", HOST_DEPOSIT_SERVICE)); + LocateRegistry.createRegistry(PORT_DEPOSIT_SERVICE); + Naming.bind(HOST_DEPOSIT_SERVICE, this); } @@ -40,6 +41,8 @@ public class DepositControllerImpl extends UnicastRemoteObject implements Contro } + + private class Notify extends Thread{ private final DepositService service; @@ -63,17 +66,25 @@ public class DepositControllerImpl extends UnicastRemoteObject implements Contro try { this.service.deposit(client.getBalance(), client.getAccount()); + } catch (RemoteException e) { e.printStackTrace(); } } - - try { Thread.sleep(15 * 1000); } catch (InterruptedException e) { e.printStackTrace(); } + } else { + try { + Thread.sleep(15 * 1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + Log.info(DepositControllerImpl.class, "No there's clients!"); + + } } diff --git a/banking/src/ufrn/imd/domain/Client.java b/banking/src/ufrn/imd/domain/Client.java index 2243e6bdabce843b1359ba9d777bba437208eee6..7419ef5f21d81687463caca4520964d3f862bb66 100644 --- a/banking/src/ufrn/imd/domain/Client.java +++ b/banking/src/ufrn/imd/domain/Client.java @@ -1,4 +1,4 @@ -package ufrn.imd.message; +package ufrn.imd.domain; import ufrn.imd.domain.Account; @@ -7,7 +7,6 @@ import java.util.Optional; public class Client implements Serializable { private static final long serialVersionUID = 1L; - private Account account; public Double getBalance() { return account.getBalance(); diff --git a/banking/src/ufrn/imd/service/BalanceService.java b/banking/src/ufrn/imd/service/BalanceService.java index 2d9315cb86301d9188170ac76fcbceabdb37c1f6..b82470c15060014b18ce9c6323ca2a37a5268fee 100644 --- a/banking/src/ufrn/imd/service/BalanceService.java +++ b/banking/src/ufrn/imd/service/BalanceService.java @@ -4,8 +4,9 @@ import ufrn.imd.domain.Account; import java.rmi.Remote; import java.rmi.RemoteException; +import java.util.Optional; public interface BalanceService extends Remote { - public void balance(Account account) throws RemoteException; + public void balance(Optional<Account> account) throws RemoteException; } diff --git a/banking/src/ufrn/imd/service/DepositService.java b/banking/src/ufrn/imd/service/DepositService.java index f85f98f67df1776750e48c57065b02823917b844..aab39ac63fd5da6827a9ee113ba692da9902459e 100644 --- a/banking/src/ufrn/imd/service/DepositService.java +++ b/banking/src/ufrn/imd/service/DepositService.java @@ -8,6 +8,6 @@ import java.util.Optional; public interface DepositService extends Remote { - public void deposit(Double value, Optional<Account> account) throws RemoteException; + public void deposit(Double value, Optional<Account> account) throws RemoteException, RuntimeException; } diff --git a/banking/src/ufrn/imd/service/impl/BalanceServiceImpl.java b/banking/src/ufrn/imd/service/impl/BalanceServiceImpl.java index 07a0ac2f115680d265ac48fa68a169b403c09a83..f550c9d9e0f97f3439028a8ba6b8137c91537600 100644 --- a/banking/src/ufrn/imd/service/impl/BalanceServiceImpl.java +++ b/banking/src/ufrn/imd/service/impl/BalanceServiceImpl.java @@ -1,2 +1,23 @@ -package ufrn.imd.service.impl;public class BalanceService { +package ufrn.imd.service.impl; + +import ufrn.imd.domain.Account; + +import java.rmi.RemoteException; +import java.util.Optional; + +import ufrn.imd.service.*; +import ufrn.imd.utils.Log; + +public class BalanceServiceImpl implements BalanceService { + + + @Override + public void balance(Optional<Account> accOP) throws RemoteException { + Account account = accOP.orElseThrow(() -> new RuntimeException("Invalid account")); + Log.info( + BalanceServiceImpl.class, + String.format("Account Balance: R$ %f", account.getBalance()) + ); + + } } diff --git a/banking/src/ufrn/imd/service/impl/DepositServiceImpl.java b/banking/src/ufrn/imd/service/impl/DepositServiceImpl.java index 7dfa731ebf41f795aa581b80f1e1d71395caca80..f7a1cb7d53f7d257d652df80008f3a8ddb9b5323 100644 --- a/banking/src/ufrn/imd/service/impl/DepositServiceImpl.java +++ b/banking/src/ufrn/imd/service/impl/DepositServiceImpl.java @@ -1,7 +1,7 @@ package ufrn.imd.service.impl; import ufrn.imd.domain.Account; -import ufrn.imd.log.Log; +import ufrn.imd.utils.Log; import ufrn.imd.service.DepositService; import java.rmi.RemoteException; @@ -15,11 +15,9 @@ public class DepositServiceImpl implements DepositService { public void deposit(Double value, Optional<Account> acOp) throws RemoteException, RuntimeException { Account account = acOp.orElseThrow(() -> new RuntimeException("Null User!")); - if(account.getBalance() < value) - throw new RuntimeException("There's no money!"); + if(account.getBalance() < value) throw new RuntimeException("There's no money!"); account.setBalance(account.getBalance() - value); Log.info(DepositServiceImpl.class, "deposit"); - } } diff --git a/banking/src/ufrn/imd/utils/Log.java b/banking/src/ufrn/imd/utils/Log.java index 673658f2be0cc76505a8047b6e19b0cd308cc364..38d3f87c29c5bba875697400c9d9fecad5cbe99a 100644 --- a/banking/src/ufrn/imd/utils/Log.java +++ b/banking/src/ufrn/imd/utils/Log.java @@ -1,4 +1,4 @@ -package ufrn.imd.utils.log; +package ufrn.imd.utils; public class Log { diff --git a/banking/src/ufrn/imd/utils/NameSpace.java b/banking/src/ufrn/imd/utils/NameSpace.java index ace96ee331f4a5691d614745891549984ecd2cc6..bb5d5251a3090f100905b78e8f8fe9d47f290cb1 100644 --- a/banking/src/ufrn/imd/utils/NameSpace.java +++ b/banking/src/ufrn/imd/utils/NameSpace.java @@ -1,7 +1,11 @@ -package ufrn.imd.utils.nameSpace; +package ufrn.imd.utils; public class NameSpace { + + public final static Integer PORT_BALANCE_SERVICE = 1908; public final static Integer PORT_DEPOSIT_SERVICE = 1907; public final static String HOST_DEPOSIT_SERVICE = String.format("rmi://127.0.0.1:%d/%s", PORT_DEPOSIT_SERVICE, "deposit"); + public final static String HOST_BALANCE_SERVICE = + String.format("rmi://127.0.0.1:%d/%s", PORT_BALANCE_SERVICE, "balance"); }