Skip to content
Snippets Groups Projects
Select Git revision
  • a0b0997b5cd674c4d5e77bafb9f6499c8c9bf04e
  • pred_err_handling default protected
  • pred_err_handling_more_prints
  • pbm_no_preemption_fix_test_input
  • pbm_no_preemption_fix_test
  • libpbm_kernel_fix
  • libpbm_kernel
  • bugfix/setup
  • libpbm_kernel_fix_bak
  • pbm_no_preemption
  • pbm
  • testing
  • sose22results
  • sose22
  • master protected
  • err_detect
  • kelvin
17 results

default_config

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());
        }
    
    }