package fucoin.actions.transaction; import java.util.HashMap; import akka.actor.ActorRef; import akka.actor.UntypedActorContext; import fucoin.Wallet; import fucoin.supervisor.DistributedCommitedTransferRequest; import fucoin.supervisor.SuperVisor; public class ActionInvokeDistributedCommitedTransfer extends CoordinatorTransaction{ private ActorRef source; private ActorRef target; private int amount; public ActionInvokeDistributedCommitedTransfer(ActorRef source, ActorRef target, int amount) { this.source=source; this.target=target; this.amount=amount; } @Override protected void onAction(ActorRef sender, ActorRef self, UntypedActorContext context, SuperVisor superVisor) { log("invoke transaction "+source.path().name()+" sends "+amount+" to "+target.path().name()); long timeout = System.currentTimeMillis()+500; DistributedCommitedTransferRequest ds = new DistributedCommitedTransferRequest(source,target,timeout); superVisor.addDistributedCommitedTransferRequest(ds); ActionPrepareDistributedCommitedTransfer apdct = new ActionPrepareDistributedCommitedTransfer(source,target,amount,timeout,ds.getId()); for(ActorRef neighbor : superVisor.getKnownNeighbors().values()){ neighbor.tell(apdct, self); } } }