Newer
Older
package fucoin.actions.transaction;
import fucoin.supervisor.DistributedCommitedTransferRequest;
Simon Könnecke
committed
import fucoin.supervisor.SuperVisorImpl;
import akka.actor.ActorRef;
import akka.actor.UntypedActorContext;
Simon Könnecke
committed
public class ActionPrepareDistributedCommittedTransferAnswer extends CoordinatorTransaction {
private ActorRef source;
private ActorRef target;
private int amount;
private boolean granted;
private long timestamp;
private long id;
Simon Könnecke
committed
public ActionPrepareDistributedCommittedTransferAnswer(ActorRef source,
ActorRef target, int amount, long timestamp, boolean granted, long id) {
this.source=source;
this.target=target;
this.amount=amount;
this.granted=granted;
this.timestamp=timestamp;
this.id=id;
}
@Override
protected void onAction(ActorRef sender, ActorRef self,
Simon Könnecke
committed
UntypedActorContext context, SuperVisorImpl superVisor) {
log(""+superVisor.getKnownNeighbors());
log("granted?"+granted);
DistributedCommitedTransferRequest request = superVisor.getRequest(id);
if(granted){
if(request==null)//unknown DistributedCommitedTransferRequest ignore
return;
int newCount = request.addPositiveAnswer(sender);
System.out.println(newCount+" have agreed on request"+id);
if(newCount == superVisor.getKnownNeighbors().size()){
ActionCommitDistributedCommitedTransfer acdct = new ActionCommitDistributedCommitedTransfer(source,target,amount,true,timestamp,id);
}
superVisor.deleteRequest(request);
}
}else{
//A client wants to rollback
if(request!=null){
ActionCommitDistributedCommitedTransfer acdct = new ActionCommitDistributedCommitedTransfer(source,target,amount,false,timestamp,id);
for(ActorRef neighbor : request.getAnswers()){
neighbor.tell(acdct, self);
}