Skip to content
Snippets Groups Projects
Select Git revision
  • fe89c93bc1ce9ceda746e3282b71e0fbec2eeb0b
  • master default
  • dev-group3-qdigest
  • dev-group2-all-aggregations
  • dev-group2-graphs
  • dev-group2-limit-neighbors
  • dev-group1-stefan
  • dev-group3-kim
  • dev-group1-simon
9 results

WalletImpl.java

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    WalletImpl.java 5.81 KiB
    package fucoin.wallet;
    
    import akka.actor.ActorRef;
    import akka.actor.Props;
    import fucoin.actions.ClientAction;
    import fucoin.actions.join.ActionJoin;
    import fucoin.actions.join.ActionJoinAnswer;
    import fucoin.actions.persist.ActionInvokeLeave;
    import fucoin.actions.persist.ActionInvokeRevive;
    import fucoin.actions.transaction.ActionGetAmountAnswer;
    import fucoin.actions.transaction.ActionInvokeSentMoney;
    import fucoin.gui.WalletController;
    import fucoin.gui.WalletGuiController;
    
    public class WalletImpl extends AbstractWallet implements WalletController {
    
        private ActorRef preknownNeighbour;
        private ActorRef remoteSuperVisorActor;
        private WalletGuiController gui;
        private String preknownNeighbourName;
        private boolean isActive;
    
        public WalletImpl(ActorRef preknownNeighbour, String preknownNeighbourName, String walletName, ActorRef remoteSuperVisorActor) {
            super(walletName);
            this.preknownNeighbourName = preknownNeighbourName;
            this.preknownNeighbour = preknownNeighbour;
            this.remoteSuperVisorActor = remoteSuperVisorActor;
        }
    
        public void addAmount(int amount) {
            setAmount(this.amount + amount);
            log(" My amount is now " + this.amount);
        }
    
        @Override
        public void leave() {
            getSelf().tell(new ActionInvokeLeave(), getSelf());
        }
    
        @Override
        public void onReceive(Object message) {
    
            //log(getSender().path().name() + " invokes " + getSelf().path().name() + " to do " + message.getClass().getSimpleName());
            if (message instanceof ActionInvokeRevive) {
                ((ActionInvokeRevive) message).doAction(this);
            }
            if (!isActive && !(message instanceof ActionInvokeRevive)) return;
            //System.out.println(message);
            if (message instanceof ClientAction) {
                ((ClientAction) message).doAction(this);
            }
    
        }
    
        @Override
        public void preStart() throws Exception {
            isActive = true;
            if (gui != null) {
                gui.setAddress(getAddress());
            }
            String path = "akka.tcp://Core@127.0.0.1:1234/user/Main";
            //System.out.println(getContext().provider().getExternalAddressFor(getSelf().path().address()));
            //log("my address should be "+getAddress());
            //log(""+preknownNeighbour);
            //knownNeighbors.put(getName(),getSelf());
    
            //System.out.println(knownNeighbors);
            if (preknownNeighbour != null) {
                addKnownNeighbor(preknownNeighbourName, preknownNeighbour);
                preknownNeighbour.tell(new ActionJoin(), getSelf());
                ActionJoinAnswer aja = new ActionJoinAnswer();
                aja.someNeighbors.putAll(getKnownNeighbors());
                aja.someNeighbors.put(name, getSelf());
                preknownNeighbour.tell(aja, getSelf());
    
            }
            //setAmount(100);
            //remoteSuperVisorActor.tell(new ServerActionJoin(name), getSelf());
        }
    
        @Override
        public void postStop() throws Exception {
            leave();
            super.postStop();
    
        }
    
    
        public static Props props(ActorRef preknownNeighbour, String preknownNeighbourName, String walletName, ActorRef remoteSuperVisorActor) {
            return Props.create(WalletImpl.class, new WalletFactory(preknownNeighbour, preknownNeighbourName, walletName, remoteSuperVisorActor));
        }
    
        @Override
        public boolean equals(Object obj) {
            if (obj instanceof WalletImpl) {
                WalletImpl wobj = (WalletImpl) obj;
                return amount == wobj.amount && name.equals(wobj.name);
            }
            return false;
        }
    
        public void setGui(WalletGuiController gui) {
            this.gui = gui;
        }
    
        public void setAmount(int amount) {
            this.amount = amount;
            if (remoteSuperVisorActor != null) {
                remoteSuperVisorActor.tell(new ActionGetAmountAnswer(getAddress(), getName(), amount), getSelf());
            }
            if (gui != null) {
                gui.setAmount(this.amount);
            }
        }
    
        public int getAmount() {
            return amount;
        }
    
        public ActorRef getPreknownNeighbour() {
            return preknownNeighbour;
        }
    
        public ActorRef getRemoteSuperVisorActor() {
            return remoteSuperVisorActor;
        }
    
        public WalletGuiController getGui() {
            return gui;
        }
    
        public String getPreknownNeighbourName() {
            return preknownNeighbourName;
        }
    
        public boolean isActive() {
            return isActive;
        }
    
        @Override
        public boolean addKnownNeighbor(String key, ActorRef value) {
            System.out.println(key + " is newNeighbor of " + name + "?" + !getKnownNeighbors().containsKey(key));
            if (getKnownNeighbors().containsKey(key) || key.equals(name)) {
                return false;
            }
    
            boolean newNeighbor = super.addKnownNeighbor(key, value);
            if (gui != null && newNeighbor) {
                gui.addKnownAddress(key);
            }
            return newNeighbor;
        }
    
        public void setPreknownNeighbour(ActorRef preknownNeighbour) {
            this.preknownNeighbour = preknownNeighbour;
        }
    
        public void setRemoteSuperVisorActor(ActorRef remoteSuperVisorActor) {
            this.remoteSuperVisorActor = remoteSuperVisorActor;
        }
    
        public void setPreknownNeighbourName(String preknownNeighbourName) {
            this.preknownNeighbourName = preknownNeighbourName;
        }
    
        @Override
        public void log(String msg) {
            if (gui != null) {
                gui.addLogMsg(msg);
            } else {
                System.out.println(msg);
            }
        }
    
        public void logTransaction(String msg) {
            if (gui != null) {
                gui.addTransactionLogMessage(msg);
            } else {
                System.out.println(msg);
            }
        }
    
        public void setActive(boolean isActive) {
            this.isActive = isActive;
        }
    
        @Override
        public void send(String address, int amount) {
            getSelf().tell(new ActionInvokeSentMoney(address, amount), getSelf());
        }
    
    }