From 727b008ae6da2679916bf990bc50532f1630b2fd Mon Sep 17 00:00:00 2001 From: Luca Keidel <info@lucakeidel.de> Date: Sun, 10 Jul 2016 13:48:23 +0200 Subject: [PATCH] Changed random transaction callback to a future --- .../configurations/AbstractConfiguration.java | 26 ++++++++----------- .../MassWalletConfiguration.java | 13 ++++++++-- src/main/java/fucoin/wallet/WalletImpl.java | 4 +-- 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/main/java/fucoin/configurations/AbstractConfiguration.java b/src/main/java/fucoin/configurations/AbstractConfiguration.java index c136b21..f4e3e7d 100644 --- a/src/main/java/fucoin/configurations/AbstractConfiguration.java +++ b/src/main/java/fucoin/configurations/AbstractConfiguration.java @@ -2,6 +2,7 @@ package fucoin.configurations; import akka.actor.ActorRef; import akka.actor.Props; +import akka.dispatch.Futures; import akka.pattern.Patterns; import akka.util.Timeout; import fucoin.AbstractNode; @@ -20,6 +21,7 @@ import org.gephi.graph.api.Graph; import org.gephi.graph.api.Node; import scala.concurrent.Await; import scala.concurrent.Future; +import scala.concurrent.Promise; import scala.concurrent.duration.Duration; import java.util.*; @@ -38,7 +40,7 @@ public abstract class AbstractConfiguration extends AbstractNode { private Timeout timeout = new Timeout(Duration.create(10, "seconds")); private int remainingTransactions; - private Callback callback; + private Promise<Void> transactionFinished; private ActorRef lastWallet = null; @@ -117,18 +119,16 @@ public abstract class AbstractConfiguration extends AbstractNode { return activeActors.get(name); } - protected void randomTransactions(int number, int maxTransactionsAtTheSameTime) { - randomTransactions(number, maxTransactionsAtTheSameTime, null); - } - - protected void randomTransactions(int number, int maxTransactionsAtTheSameTime, Callback callback) { - this.callback = callback; + protected Future<Void> randomTransactions(int number, int maxTransactionsAtTheSameTime) { + this.transactionFinished = Futures.promise(); remainingTransactions = number; for (int i = 0; i < Math.min(number, maxTransactionsAtTheSameTime); i++) { nextRandomTransaction(); } + return transactionFinished.future(); + } private void nextRandomTransaction() { @@ -138,7 +138,7 @@ public abstract class AbstractConfiguration extends AbstractNode { } catch (Exception e) { System.err.println("Error while trying to perform a random transaction: " + e.getMessage()); remainingTransactions = 0; - callback = null; + transactionFinished = null; } } @@ -191,10 +191,10 @@ public abstract class AbstractConfiguration extends AbstractNode { if (remainingTransactions > 0) { nextRandomTransaction(); } else { - if (callback != null) { - callback.transactionsFinished(); + if (transactionFinished != null) { + transactionFinished.success(null); + transactionFinished = null; } - callback = null; } } } @@ -234,8 +234,4 @@ public abstract class AbstractConfiguration extends AbstractNode { wallet.tell(new ActionAddOverlayNeighbours(overlayNeighbours), self()); }); } - - interface Callback { - public void transactionsFinished(); - } } diff --git a/src/main/java/fucoin/configurations/MassWalletConfiguration.java b/src/main/java/fucoin/configurations/MassWalletConfiguration.java index aa71371..14b4979 100644 --- a/src/main/java/fucoin/configurations/MassWalletConfiguration.java +++ b/src/main/java/fucoin/configurations/MassWalletConfiguration.java @@ -1,5 +1,7 @@ package fucoin.configurations; +import akka.dispatch.OnSuccess; +import fucoin.actions.transaction.ActionGetAmountAnswer; import fucoin.configurations.internal.ConfigurationName; /** @@ -11,13 +13,20 @@ public class MassWalletConfiguration extends AbstractConfiguration { public void run() { initSupervisor(); try { - spawnWallets(200, false); + spawnWallets(2, false); System.out.println("Wallet spawning done!"); } catch (Exception e) { System.out.println("Wallet spawning timed out!"); } - randomTransactions(10, 2, () -> System.out.println("All random transactions finished!")); + randomTransactions(5, 2).onSuccess(new OnSuccess<Void>() { + @Override + public void onSuccess(Void result) { + // You can start your algorithm here if you want to. + // Alternatively, you can also notify the user that all transactions are finished + System.out.println("All random transactions finished!"); + } + }, context().dispatcher()); } @Override diff --git a/src/main/java/fucoin/wallet/WalletImpl.java b/src/main/java/fucoin/wallet/WalletImpl.java index d77d6fd..ec7899f 100644 --- a/src/main/java/fucoin/wallet/WalletImpl.java +++ b/src/main/java/fucoin/wallet/WalletImpl.java @@ -50,7 +50,7 @@ public class WalletImpl extends AbstractWallet { */ public void addAmount(int amount) { setAmount(this.getAmount() + amount); - addLogMsg(" My amount is now " + this.getAmount()); + //addLogMsg(" My amount is now " + this.getAmount()); } @Override @@ -198,7 +198,7 @@ public class WalletImpl extends AbstractWallet { @Override public boolean addKnownNeighbor(String key, ActorRef value) { - addLogMsg(key + " is newNeighbor of " + name + "?" + !getKnownNeighbors().containsKey(key)); + //addLogMsg(key + " is newNeighbor of " + name + "?" + !getKnownNeighbors().containsKey(key)); if (getKnownNeighbors().containsKey(key) || key.equals(name)) { return false; } -- GitLab