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
No related branches found
No related tags found
1 merge request!6Overlay topology
......@@ -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();
}
}
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
......
......@@ -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;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment