Skip to content
Snippets Groups Projects
Unverified Commit 727b008a authored by Luca Keidel's avatar Luca Keidel
Browse files

Changed random transaction callback to a future

parent bc93e370
Branches
No related tags found
1 merge request!6Overlay topology
...@@ -2,6 +2,7 @@ package fucoin.configurations; ...@@ -2,6 +2,7 @@ package fucoin.configurations;
import akka.actor.ActorRef; import akka.actor.ActorRef;
import akka.actor.Props; import akka.actor.Props;
import akka.dispatch.Futures;
import akka.pattern.Patterns; import akka.pattern.Patterns;
import akka.util.Timeout; import akka.util.Timeout;
import fucoin.AbstractNode; import fucoin.AbstractNode;
...@@ -20,6 +21,7 @@ import org.gephi.graph.api.Graph; ...@@ -20,6 +21,7 @@ import org.gephi.graph.api.Graph;
import org.gephi.graph.api.Node; import org.gephi.graph.api.Node;
import scala.concurrent.Await; import scala.concurrent.Await;
import scala.concurrent.Future; import scala.concurrent.Future;
import scala.concurrent.Promise;
import scala.concurrent.duration.Duration; import scala.concurrent.duration.Duration;
import java.util.*; import java.util.*;
...@@ -38,7 +40,7 @@ public abstract class AbstractConfiguration extends AbstractNode { ...@@ -38,7 +40,7 @@ public abstract class AbstractConfiguration extends AbstractNode {
private Timeout timeout = new Timeout(Duration.create(10, "seconds")); private Timeout timeout = new Timeout(Duration.create(10, "seconds"));
private int remainingTransactions; private int remainingTransactions;
private Callback callback; private Promise<Void> transactionFinished;
private ActorRef lastWallet = null; private ActorRef lastWallet = null;
...@@ -117,18 +119,16 @@ public abstract class AbstractConfiguration extends AbstractNode { ...@@ -117,18 +119,16 @@ public abstract class AbstractConfiguration extends AbstractNode {
return activeActors.get(name); return activeActors.get(name);
} }
protected void randomTransactions(int number, int maxTransactionsAtTheSameTime) { protected Future<Void> randomTransactions(int number, int maxTransactionsAtTheSameTime) {
randomTransactions(number, maxTransactionsAtTheSameTime, null); this.transactionFinished = Futures.promise();
}
protected void randomTransactions(int number, int maxTransactionsAtTheSameTime, Callback callback) {
this.callback = callback;
remainingTransactions = number; remainingTransactions = number;
for (int i = 0; i < Math.min(number, maxTransactionsAtTheSameTime); i++) { for (int i = 0; i < Math.min(number, maxTransactionsAtTheSameTime); i++) {
nextRandomTransaction(); nextRandomTransaction();
} }
return transactionFinished.future();
} }
private void nextRandomTransaction() { private void nextRandomTransaction() {
...@@ -138,7 +138,7 @@ public abstract class AbstractConfiguration extends AbstractNode { ...@@ -138,7 +138,7 @@ public abstract class AbstractConfiguration extends AbstractNode {
} catch (Exception e) { } 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; remainingTransactions = 0;
callback = null; transactionFinished = null;
} }
} }
...@@ -191,10 +191,10 @@ public abstract class AbstractConfiguration extends AbstractNode { ...@@ -191,10 +191,10 @@ public abstract class AbstractConfiguration extends AbstractNode {
if (remainingTransactions > 0) { if (remainingTransactions > 0) {
nextRandomTransaction(); nextRandomTransaction();
} else { } else {
if (callback != null) { if (transactionFinished != null) {
callback.transactionsFinished(); transactionFinished.success(null);
transactionFinished = null;
} }
callback = null;
} }
} }
} }
...@@ -234,8 +234,4 @@ public abstract class AbstractConfiguration extends AbstractNode { ...@@ -234,8 +234,4 @@ public abstract class AbstractConfiguration extends AbstractNode {
wallet.tell(new ActionAddOverlayNeighbours(overlayNeighbours), self()); wallet.tell(new ActionAddOverlayNeighbours(overlayNeighbours), self());
}); });
} }
interface Callback {
public void transactionsFinished();
}
} }
package fucoin.configurations; package fucoin.configurations;
import akka.dispatch.OnSuccess;
import fucoin.actions.transaction.ActionGetAmountAnswer;
import fucoin.configurations.internal.ConfigurationName; import fucoin.configurations.internal.ConfigurationName;
/** /**
...@@ -11,13 +13,20 @@ public class MassWalletConfiguration extends AbstractConfiguration { ...@@ -11,13 +13,20 @@ public class MassWalletConfiguration extends AbstractConfiguration {
public void run() { public void run() {
initSupervisor(); initSupervisor();
try { try {
spawnWallets(200, false); spawnWallets(2, false);
System.out.println("Wallet spawning done!"); System.out.println("Wallet spawning done!");
} catch (Exception e) { } catch (Exception e) {
System.out.println("Wallet spawning timed out!"); 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 @Override
......
...@@ -50,7 +50,7 @@ public class WalletImpl extends AbstractWallet { ...@@ -50,7 +50,7 @@ public class WalletImpl extends AbstractWallet {
*/ */
public void addAmount(int amount) { public void addAmount(int amount) {
setAmount(this.getAmount() + amount); setAmount(this.getAmount() + amount);
addLogMsg(" My amount is now " + this.getAmount()); //addLogMsg(" My amount is now " + this.getAmount());
} }
@Override @Override
...@@ -198,7 +198,7 @@ public class WalletImpl extends AbstractWallet { ...@@ -198,7 +198,7 @@ public class WalletImpl extends AbstractWallet {
@Override @Override
public boolean addKnownNeighbor(String key, ActorRef value) { 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)) { if (getKnownNeighbors().containsKey(key) || key.equals(name)) {
return false; return false;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment