diff --git a/src/main/java/fucoin/actions/aggregation/ActionAggregationCancel.java b/src/main/java/fucoin/actions/aggregation/ActionAggregationCancel.java index 49e4478508b5ed7313d5ac019736c43401ce7d81..f0b831bc024ffe071d7b60000f3b5c48b3a60f0c 100644 --- a/src/main/java/fucoin/actions/aggregation/ActionAggregationCancel.java +++ b/src/main/java/fucoin/actions/aggregation/ActionAggregationCancel.java @@ -32,10 +32,14 @@ public class ActionAggregationCancel extends ActionAggregation { if (isDone()) { wallet.addExcludedNeighbor(sender); } - if (!wallet.areAllNeighborsExcluded()) { + AggregationContext aggregationContext = wallet.getAggregationContext(); + if (!wallet.areAllNeighborsExcluded() && !aggregationContext + .isDone()) { continueAggregation(wallet); + } else if (aggregationContext.isDone() && !wallet.areAllNeighborsExcluded()) { + sendEndMessage(wallet); } else if (wallet.hasAggregationContext()) { - sendAggregatedResult(wallet, wallet.getAggregationContext()); + sendAggregatedResult(wallet, aggregationContext); sendEndMessage(wallet); } } diff --git a/src/main/java/fucoin/wallet/WalletImpl.java b/src/main/java/fucoin/wallet/WalletImpl.java index 613f3952e00996d47d6626c3a1b5fe670f285850..9afc7d3533cb1fe9fb715f2fb9759c04a775cbf5 100644 --- a/src/main/java/fucoin/wallet/WalletImpl.java +++ b/src/main/java/fucoin/wallet/WalletImpl.java @@ -11,6 +11,7 @@ import akka.actor.ActorRef; import akka.actor.Props; import fucoin.actions.ClientAction; import fucoin.actions.aggregation.AggregationContext; +import fucoin.actions.aggregation.AggregationContext.AggregationContextBuilder; import fucoin.actions.join.ActionJoin; import fucoin.actions.join.ActionJoinAnswer; import fucoin.actions.join.ActionTellSupervisor; @@ -29,7 +30,7 @@ public class WalletImpl extends AbstractWallet { private transient WalletGuiControl gui; private String preKnownNeighbourName; private boolean isActive; - private AggregationContext aggregationContext; + private AggregationContext aggregationContext = new AggregationContextBuilder(null, null, amount).build(); private boolean hasPendingAggregationRequest = false; private ConcurrentLinkedQueue<ActorRef> deferedSupervisorReceivers = new ConcurrentLinkedQueue<>(); private transient final EvictingQueue<UUID> handledAggregationRequests = EvictingQueue.create(10);