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