-
Michael Kmoch authored
added paper v0.5 will be updated
Michael Kmoch authoredadded paper v0.5 will be updated
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
SuperVisor.java 2.56 KiB
package fucoin.supervisor;
import java.awt.Label;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Queue;
import java.util.concurrent.Semaphore;
import akka.actor.ActorRef;
import akka.actor.Props;
import fucoin.AbstractNode;
import fucoin.actions.Action;
import fucoin.actions.persist.ActionInvokeUpdate;
public class SuperVisor extends AbstractNode {
private AmountTableModel amountTableModel;
private Label averageamountLbl;
public SuperVisor(AmountTableModel amountTableModel, Label averageamountLbl) {
this.amountTableModel = amountTableModel;
this.averageamountLbl = averageamountLbl;
}
@Override
public void onReceive(Object msg) {
log(msg.getClass().getSimpleName());
((Action) msg).doAction(this);
}
Semaphore mutex = new Semaphore(1);
private Map<Long,DistributedCommitedTransferRequest> requestQueue;
public static Props props() {
return Props.create(SuperVisor.class, new SuperVisorCreator());
}
public void updateValues() {
getSelf().tell(new ActionInvokeUpdate(), getSelf());
}
public void exit() {
getContext().stop(getSelf());
}
@Override
public void postStop() throws Exception {
super.postStop();
}
public void addDistributedCommitedTransferRequest(
DistributedCommitedTransferRequest request) {
requestQueue.put(request.getId(),request);
}
@Override
public void preStart() throws Exception {
super.preStart();
requestQueue = new HashMap<Long,DistributedCommitedTransferRequest>();
self().tell(new ActionUpdateQueue(), self());
}
/**
* filters the request for outdated and removes them
* @return deleted outdated request
*/
public List<DistributedCommitedTransferRequest> updateList(){
List<Long> deletesIds = new ArrayList<Long>();
List<DistributedCommitedTransferRequest> deletes = new ArrayList<DistributedCommitedTransferRequest>();
for(Entry<Long, DistributedCommitedTransferRequest> outdatedRequest : requestQueue.entrySet()){
if(outdatedRequest.getValue().getTimeout()<System.currentTimeMillis()){
deletesIds.add(outdatedRequest.getKey());
deletes.add(outdatedRequest.getValue());
}
}
for(Long delete : deletesIds){
requestQueue.remove(delete);
}
return deletes;
}
public DistributedCommitedTransferRequest getRequest(Long id) {
DistributedCommitedTransferRequest searchedrequest = requestQueue.get(id);
return searchedrequest ;
}
public void deleteRequest(DistributedCommitedTransferRequest request) {
requestQueue.remove(request.getId());
}
}