package se.chalmers.gdcn.hashcash;
import se.chalmers.gdcn.network.WorkerID;
import java.io.Serializable;
import java.security.SecureRandom;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.ConcurrentHashMap;
/**
* Created by weeeeeew on 2014-04-29.
*/
public class WorkerChallengesManager implements Serializable{
private final Map<WorkerID, Integer> registeredWorkers = new ConcurrentHashMap<>();
private final Random random = new SecureRandom();
/**
* Registers that a worker has solved a challenge.
* @param worker The worker that has solved a challenge.
* @param solution The Solution the worker has solved.
*/
public void solvedChallenge(WorkerID worker, Solution solution) {
Integer score = getCurrentScore(worker);
score += (random.nextInt(1+Math.abs(score + solution.getDifficulty())) - solution.getDifficulty()) % (Integer.MAX_VALUE/4);
registeredWorkers.put(worker,score);
}
public boolean newWorker(WorkerID worker) {
return !registeredWorkers.containsKey(worker);
}
public int getCurrentScore(WorkerID worker) {
return newWorker(worker) ? 0 : registeredWorkers.get(worker);
}
}