diff --git a/src/main/java/fucoin/actions/transaction/ActionCommitDistributedCommittedTransfer.java b/src/main/java/fucoin/actions/transaction/ActionCommitDistributedCommittedTransfer.java index 2605a2f2ce687183f409e4059d77ef95cec537cf..0c7cbc5ca668b0612c0bbac4ba52da35d6ec7552 100644 --- a/src/main/java/fucoin/actions/transaction/ActionCommitDistributedCommittedTransfer.java +++ b/src/main/java/fucoin/actions/transaction/ActionCommitDistributedCommittedTransfer.java @@ -70,7 +70,7 @@ public class ActionCommitDistributedCommittedTransfer extends ClientAction { } // recipient should notify a possible observer - if (observer != null) { + if (observer != null && granted) { observer.tell(new ActionNotifyObserver(source, target, amount, granted, timestamp, id), self); } //wallet.addLogMsg("wallet.amounts:" + wallet.amounts); diff --git a/src/main/java/fucoin/actions/transaction/ActionInvokeSentMoney.java b/src/main/java/fucoin/actions/transaction/ActionInvokeSentMoney.java index 81fa556b6da8247929ca4eed973a83f52ebfce58..c6eda7cdfe053d1e518701115ae54cdaa07df9d1 100644 --- a/src/main/java/fucoin/actions/transaction/ActionInvokeSentMoney.java +++ b/src/main/java/fucoin/actions/transaction/ActionInvokeSentMoney.java @@ -20,12 +20,14 @@ public class ActionInvokeSentMoney extends Transaction { @Override protected void onAction(ActorRef sender, ActorRef self, UntypedActorContext context, AbstractWallet wallet) { - wallet.addLogMsg(wallet.getKnownNeighbors() + ""); + if (wallet.getKnownNeighbors().containsKey(name)) { + wallet.addLogMsg("Sender knows Wallet " + name); wallet.getRemoteSuperVisorActor().tell( new ActionInvokeDistributedCommittedTransfer(self, wallet.getKnownNeighbors().get(name), amount, observer), sender); } else { + wallet.addLogMsg("Sender don't knows Wallet " + name); //Search the wallet ActionSearchWalletReference aswr = new ActionSearchWalletReference(name); //Ask all neighbors diff --git a/src/main/java/fucoin/configurations/AbstractConfiguration.java b/src/main/java/fucoin/configurations/AbstractConfiguration.java index 5be8b9aba2c8e7a0b2dc15873033acb66fc7c220..3032373135fa2b679eebc00fbd700950ccc924fa 100644 --- a/src/main/java/fucoin/configurations/AbstractConfiguration.java +++ b/src/main/java/fucoin/configurations/AbstractConfiguration.java @@ -12,7 +12,6 @@ import fucoin.actions.control.ActionWalletSendMoney; import fucoin.actions.join.ActionTellSupervisor; import fucoin.actions.transaction.ActionGetAmount; import fucoin.actions.transaction.ActionGetAmountAnswer; -import fucoin.actions.transaction.ActionInvokeDistributedCommittedTransfer; import fucoin.actions.transaction.ActionNotifyObserver; import fucoin.configurations.internal.ConfigurationCreator; import fucoin.supervisor.SuperVisorImpl; @@ -37,7 +36,7 @@ public abstract class AbstractConfiguration extends AbstractNode { private Timeout timeout = new Timeout(Duration.create(10, "seconds")); - private int remainingTransactions; + protected int remainingTransactions; public static Props props(Class configurationClass) { @@ -65,20 +64,18 @@ public abstract class AbstractConfiguration extends AbstractNode { if (numOfWallets == 0) { props = WalletImpl.props(null, name, createGUI); } else { - props = WalletImpl.props(activeActors.get(numOfWallets - 1), name, createGUI); + ActorRef knownNeighbour = activeActors.get(ThreadLocalRandom.current().nextInt(activeActors.size())); + props = WalletImpl.props(knownNeighbour, name, createGUI); } ActorRef actorRef = context().actorOf(props, name); activeActors.add(actorRef); - //if (numOfWallets == 0) { + //Tell the new Wallet the SuperVisor, + //probably knownNeighbour isn't so far and can tell the him. actorRef.tell(new ActionTellSupervisor(superVisor), superVisor); - /* - superVisor.tell( new ActionInvokeDistributedCommittedTransfer(superVisor, - actorRef, 100, superVisor), actorRef); - */ - //} + return actorRef; } @@ -118,12 +115,16 @@ public abstract class AbstractConfiguration extends AbstractNode { } - private void nextRandomTransaction() { + protected void nextRandomTransaction() { + if (remainingTransactions <= 0) { + return; + } + remainingTransactions--; try { randomTransaction(); } catch (Exception e) { - System.err.println("Error while trying to perform a random transaction: "+e.getMessage()); + System.err.println("Error while trying to perform a random transaction: " + e.getMessage()); remainingTransactions = 0; } } @@ -139,8 +140,8 @@ public abstract class AbstractConfiguration extends AbstractNode { Future<Object> futureNeighbour = Patterns.ask(sender, new ActionWalletGetNeighbours(), timeout); ActionWalletGetNeighboursAnswer neighboursAnswer = (ActionWalletGetNeighboursAnswer) Await.result(futureNeighbour, timeout.duration()); - for (int i=1; i < wallets.size(); i++) { - if (neighboursAnswer.getNeighbour().containsValue(wallets.get(i))) { + for (int i = 1; i < wallets.size(); i++) { + if (!wallets.get(i).equals(sender) && neighboursAnswer.getNeighbour().containsValue(wallets.get(i))) { recipient = wallets.get(i); } } diff --git a/src/main/java/fucoin/configurations/MassWalletConfiguration.java b/src/main/java/fucoin/configurations/MassWalletConfiguration.java index bbcd338eab884d3d2fe50ce89ba0d92b1182e93d..dc2631707f7014e9673e80dde61dba9fa55b8bab 100644 --- a/src/main/java/fucoin/configurations/MassWalletConfiguration.java +++ b/src/main/java/fucoin/configurations/MassWalletConfiguration.java @@ -8,6 +8,7 @@ import fucoin.configurations.internal.ConfigurationName; */ @ConfigurationName("Lots of Wallets") public class MassWalletConfiguration extends AbstractConfiguration { + private boolean runRandomTransactions = false; @Override public void run() { initSupervisor(); @@ -18,12 +19,17 @@ public class MassWalletConfiguration extends AbstractConfiguration { } catch (Exception e) { System.out.println("Wallet spawning timed out!"); } - - randomTransactions(100, 10); + remainingTransactions = 100; + runRandomTransactions = true; + nextRandomTransaction(); + //randomTransactions(100, 10); } @Override public void onReceive(Object message) { + if (message instanceof ActionNotifyObserver && runRandomTransactions) { + nextRandomTransaction(); + } super.onReceive(message); } }