package gameengine;
import common.Transaction;
import config.GroupConfigProvider;
import gameengine.operations.NoOp;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import statemachine.InvalidStateMachineOperationException;
import statemachine.Operation;
/**
* Created by sctu on 12/4/14.
*/
public class BenchmarkingGameEngine extends ChineseCheckersGameEngine {
private long startTime;
private static Logger LOG = LogManager.getLogger(BenchmarkingGameEngine.class);
public BenchmarkingGameEngine(GroupConfigProvider configProvider) {
super(configProvider);
}
// runner should call this
@Override
public void requestCommit(Operation<ChineseCheckersState> transaction) {
this.startTime = System.currentTimeMillis();
super.requestCommit(transaction);
}
@Override
public void addListener(GameEngineListener<ChineseCheckersState> listener) {
}
// log should call this
@Override
public void notifyOnCommit(Transaction<Operation<ChineseCheckersState>> transaction) throws Exception {
super.notifyOnCommit(transaction);
LOG.warn("Committed message on server: " + configProvider.getMe().getName());
LOG.error("The transaction's replica ID is: " + transaction.getReplicaId());
if (transaction.getReplicaId() == configProvider.getMe().getReplicaID()) {
LOG.error("Time spent on last move: " + (System.currentTimeMillis() - startTime));
}
if ((transaction.getReplicaId() % configProvider.getGroupMembers().size()) + 1 == configProvider.getMe().getReplicaID()) {
requestCommit(new NoOp());
}
}
}